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, 2017, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Documentation Redistribution Policyも参照してください。