- すべてのスーパー・インタフェース:
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- その他の入出力エラーが発生した場合
-