public interface ReadableByteChannel extends Channel
読み込み可能なチャネル上で、並行して複数の読み込み操作を実行することはできません。チャネル上で読み込み操作を開始したスレッドがある場合、新たな読み込み操作を開始しようとする別のスレッドは、最初の操作が完了するまでブロックされます。読み込み操作とその他の入出力操作を同時並行で実行できるかどうかは、チャネルの種類によって決まります。
修飾子と型 | メソッドと説明 |
---|---|
int |
read(ByteBuffer dst)
このチャネルのバイトシーケンスを指定のバッファーに読み込みます。
|
int read(ByteBuffer dst) throws IOException
チャネルから最大 r バイトを読み取ろうとします。r は、このメソッドを呼び出すときにバッファー内に残っているバイト数、dst.remaining() になります。
長さ n (0 <= n <= r) のバイトシーケンスが読み取られるとします。このバイトシーケンスがバッファーに転送されるため、シーケンス内の最初のバイトのインデックスは p、最後のバイトのインデックスは p + n - 1 になります。なお、p は、このメソッドが呼び出されるときのバッファーの位置です。バッファーの位置は、終了時に p + n に等しくなります。リミットに変化はありません。
読み込み操作によってバッファーがいっぱいになるとはかぎりません。バイトが一切読み取られない場合もあります。バッファーがいっぱいになるかどうかは、チャネルの本来の性質と状態によって決定します。たとえば非ブロックモードのソケットは、ソケットの入力バッファーからただちに取得できるバイト以外を読み取ることができません。同様に、ファイルチャネルは、ファイル内のバイト以外を読み取ることができません。ただし、チャネルがブロックモードであり、バッファー内のバイト数が 1 バイト以上の場合、1 バイト以上が読み取られるまでこのメソッドはブロックされることになっています。
このメソッドはいつでも呼び出すことができます。ただし、ほかのスレッドがこのチャネルに対して読み込み操作を開始している場合、このメソッドの呼び出しは最初の操作が終わるまでブロックされます。
dst
- バイトの転送先バッファーNonReadableChannelException
- このチャネルが読み取り可能でない場合ClosedChannelException
- このチャネルがクローズしている場合AsynchronousCloseException
- 読み取り操作の進行中に、別のスレッドによってこのチャネルがクローズされた場合ClosedByInterruptException
- 読み取り操作の進行中に、別のスレッドからの割り込みがあったためにチャネルがクローズし、現在のスレッドの割り込みステータスが設定された場合IOException
- その他の入出力エラーが発生した場合 バグまたは機能を送信
詳細な API リファレンスおよび開発者ドキュメントについては、Java SE のドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.