- すべてのスーパー・インタフェース:
AutoCloseable
,Channel
,Closeable
- 既知のすべてのサブインタフェース:
ByteChannel
,ScatteringByteChannel
,SeekableByteChannel
- 既知のすべての実装クラス:
DatagramChannel
,FileChannel
,Pipe.SourceChannel
,SocketChannel
読込み可能なチャネル上で、並行して複数の読込み操作を実行することはできません。 チャネル上で読込み操作を開始したスレッドがある場合、新たな読込み操作を開始しようとする別のスレッドは、最初の操作が完了するまでブロックされます。 読込み操作とその他の入出力操作を同時並行で実行できるかどうかは、チャネルの種類によって決まります。
- 導入されたバージョン:
- 1.4
-
メソッドのサマリー
-
メソッドの詳細
-
read
int read(ByteBuffer dst) throws IOExceptionこのチャネルのバイト・シーケンスを指定のバッファに読み込みます。チャネルから最大rバイトを読み取ろうとします。rは、このメソッドを呼び出すときにバッファ内に残っているバイト数、
dst.remaining()
になります。長さn (
0
<=
n<=
r)のバイト・シーケンスが読み取られるとします。 このバイト・シーケンスがバッファに転送されるため、シーケンス内の最初のバイトのインデックスはp、最後のバイトのインデックスはp+
n-
1
になります。なお、pは、このメソッドが呼び出されるときのバッファの位置です。 バッファの位置は、終了時にp+
nに等しくなります。リミットに変化はありません。読込み操作によってバッファがいっぱいになるとはかぎりません。バイトが一切読み取られない場合もあります。 バッファがいっぱいになるかどうかは、チャネルの本来の性質と状態によって決定します。 たとえば非ブロック・モードのソケットは、ソケットの入力バッファからただちに取得できるバイト以外を読み取ることができません。同様に、ファイル・チャネルは、ファイル内のバイト以外を読み取ることができません。 ただし、チャネルがブロック・モードであり、バッファ内のバイト数が1バイト以上の場合、1バイト以上が読み取られるまでこのメソッドはブロックされることになっています。
このメソッドはいつでも呼び出すことができます。 ただし、ほかのスレッドがこのチャネルに対して読込み操作を開始している場合、このメソッドの呼出しは最初の操作が終わるまでブロックされます。
- パラメータ:
dst
- バイトの転送先バッファ- 戻り値:
- 読み取られたバイト数。ゼロの場合もある。チャネルがストリームの終わりに達した場合は
-1
- 例外:
IllegalArgumentException
- バッファが読取り専用である場合NonReadableChannelException
- このチャネルが読取り可能でない場合ClosedChannelException
- このチャネルがクローズしている場合AsynchronousCloseException
- 読取り操作の進行中に、別のスレッドによってこのチャネルがクローズされた場合ClosedByInterruptException
- 読取り操作の進行中に、別のスレッドからの割込みがあったためにチャネルがクローズし、現在のスレッドの割込みステータスが設定された場合IOException
- その他の入出力エラーが発生した場合
-