- すべてのスーパー・インタフェース:
AutoCloseable
,Channel
,Closeable
,ReadableByteChannel
- 既知のすべての実装クラス:
DatagramChannel
,FileChannel
,Pipe.SourceChannel
,SocketChannel
public interface ScatteringByteChannel extends ReadableByteChannel
バッファ・シーケンスにバイトを読み込むことができるチャネルです。
分散読込み操作は、1回の呼出しで、指定されたバッファ・シーケンス(複数可)に単一のバイト・シーケンスを読み込みます。 通常、分散読込みは、特定のネットワーク・プロトコルやファイル形式(データを1個以上の固定長ヘッダーと可変長の本体からなるセグメントにまとめる働きを持つものなど)を実装する場合に役立ちます。 これに類似した収集書込み操作は、GatheringByteChannel
インタフェースで定義されます。
- 導入されたバージョン:
- 1.4
-
メソッドのサマリー
修飾子と型 メソッド 説明 long
read(ByteBuffer[] dsts)
このチャネルのバイト・シーケンスを指定されたバッファに読み込みます。long
read(ByteBuffer[] dsts, int offset, int length)
このチャネルのバイト・シーケンスを指定されたバッファのサブシーケンスに読み込みます。インタフェース java.nio.channels.ReadableByteChannelで宣言されたメソッド
read
-
メソッドの詳細
-
read
long read(ByteBuffer[] dsts, int offset, int length) throws IOExceptionこのチャネルのバイト・シーケンスを指定されたバッファのサブシーケンスに読み込みます。このメソッド呼出しは、このチャネルから最大rバイトを読み取ろうとします。rは、指定されたバッファ配列の指定されたサブシーケンスに残っている合計バイト数です。
(このメソッドの呼び出し時点。)dsts[offset].remaining() + dsts[offset+1].remaining() + ... + dsts[offset+length-1].remaining()
長さn (
0
<=
n<=
r)のバイト・シーケンスが読み取られるとします。 このシーケンスの最初のdsts[offset].remaining()
バイトまではバッファdsts[offset]
に転送され、次のdsts[offset+1].remaining()
バイトまではバッファdsts[offset+1]
に転送されます。バイト・シーケンス全部が指定されたバッファに転送されるまで、この処理が繰り返されます。 各バッファには最大限のバイトが転送されるため、最終更新バッファを除く個々の更新バッファの最終的な位置は、このバッファのリミットと等しくなります。このメソッドはいつでも呼び出すことができます。 ただし、ほかのスレッドがこのチャネルに対して読込み操作を開始している場合、このメソッドの呼出しは最初の操作が終わるまでブロックされます。
- パラメータ:
dsts
- バイトの転送先バッファoffset
- 最初のバイトの転送先となるバッファ配列内のオフセット。dsts.length
以下の負でない値length
- アクセスされる最大バッファ数。dsts.length
-offset
以下の負でない値- 戻り値:
- 読み取られたバイト数。ゼロの場合もある。チャネルがストリームの終わりに達した場合は
-1
- 例外:
IndexOutOfBoundsException
-offset
パラメータとlength
パラメータの前提条件が満たされていない場合IllegalArgumentException
- いずれかのバッファが読取り専用の場合NonReadableChannelException
- このチャネルが読取り可能でない場合ClosedChannelException
- このチャネルがクローズしている場合AsynchronousCloseException
- 読取り操作の進行中に、別のスレッドによってこのチャネルがクローズされた場合ClosedByInterruptException
- 読取り操作の進行中に、別のスレッドからの割込みがあったためにチャネルがクローズし、現在のスレッドの割込みステータスが設定された場合IOException
- その他の入出力エラーが発生した場合
-
read
long read(ByteBuffer[] dsts) throws IOExceptionこのチャネルのバイト・シーケンスを指定されたバッファに読み込みます。このメソッドを
c.read(dsts)
の形式で呼び出した場合、次の呼び出しと同じ結果が得られます。c.read(dsts, 0, dsts.length);
- パラメータ:
dsts
- バイトの転送先バッファ- 戻り値:
- 読み取られたバイト数。ゼロの場合もある。チャネルがストリームの終わりに達した場合は
-1
- 例外:
IllegalArgumentException
- いずれかのバッファが読取り専用の場合NonReadableChannelException
- このチャネルが読取り可能でない場合ClosedChannelException
- このチャネルがクローズしている場合AsynchronousCloseException
- 読取り操作の進行中に、別のスレッドによってこのチャネルがクローズされた場合ClosedByInterruptException
- 読取り操作の進行中に、別のスレッドからの割込みがあったためにチャネルがクローズし、現在のスレッドの割込みステータスが設定された場合IOException
- その他の入出力エラーが発生した場合
-