public interface GatheringByteChannel extends WritableByteChannel
この「収集」書き込み操作では、1 回の呼び出しで、指定した 1 つ以上のバッファーシーケンスから連続する複数のバイト (バイトシーケンス) を書き込むことができます。「収集」書き込みは、通常、ネットワークプロトコルやファイル形式 (たとえば、データを 1 個以上の固定長のヘッダーと可変長の本体から成るセグメントにグループ化するようなファイル形式) を実装する際に便利です。これに類似した「分散」読み込み操作は、ScatteringByteChannel
インタフェースで定義されます。
修飾子と型 | メソッドと説明 |
---|---|
long |
write(ByteBuffer[] srcs)
このチャネルのバイトシーケンスを指定されたバッファーから書き出します。
|
long |
write(ByteBuffer[] srcs, int offset, int length)
このチャネルのバイトシーケンスを指定されたバッファーのサブシーケンスから書き出します。
|
write
long write(ByteBuffer[] srcs, int offset, int length) throws IOException
このチャネルに最大 r バイトを書き込もうとします。r は、このメソッドの呼び出し時に指定されたバッファー配列の指定されたサブシーケンスに残っている合計バイト数です。
srcs[offset].remaining() + srcs[offset+1].remaining() + ... + srcs[offset+length-1].remaining()
長さ n (0 <= n <= r) のバイトシーケンスが書き込まれるとします。このシーケンスの最初の srcs[offset].remaining() バイトまではバッファー srcs[offset] から書き込まれ、次の srcs[offset+1].remaining() バイトまではバッファー srcs[offset+1] から書き込まれます。バイトシーケンス全部が書き込まれるまで、この処理が繰り返されます。各バッファーから最大限のバイト数が書き込まれるため、更新された個々のバッファーの最終的な位置は、最終更新バッファーを除いて、このバッファーのリミットと等しくなります。
特に指定がないかぎり、要求された r バイトがすべて書き込まれると書き込み操作は終了します。チャネルの種類によっては、その状態に応じて、一部のバイトしか書き込まれない場合や、まったく書き込みが行われない場合もあります。たとえば非ブロックモードのソケットチャネルでは、ソケットの出力バッファー内のバイト数が最大書き込みバイト数になります。
このメソッドはいつでも呼び出すことができます。ただし、ほかのスレッドがこのチャネルに対して書き込み操作を開始している場合、このメソッドの呼び出しは最初の操作が終わるまでブロックされます。
srcs
- バイトの取得先バッファーoffset
- 最初のバイトの取得先となるバッファー配列内のオフセット。srcs.length 以下の負でない値length
- アクセスされる最大バッファー数。srcs.length - offset 以下の負でない値IndexOutOfBoundsException
- offset パラメータと length パラメータの前提条件が満たされていない場合NonWritableChannelException
- このチャネルが書き込み可能でない場合ClosedChannelException
- このチャネルがクローズしている場合AsynchronousCloseException
- 書き込み操作の進行中に別のスレッドによってこのチャネルがクローズされた場合ClosedByInterruptException
- 書き込み中に別のスレッドからの割り込みがあったためにチャネルがクローズし、現在のスレッドの割り込みステータスが設定された場合IOException
- その他の入出力エラーが発生した場合long write(ByteBuffer[] srcs) throws IOException
このメソッドを c.write(srcs) の形式で呼び出した場合、次の呼び出しと同じ結果が得られます
c.write(srcs, 0, srcs.length);
srcs
- バイトの取得先バッファーNonWritableChannelException
- このチャネルが書き込み可能でない場合ClosedChannelException
- このチャネルがクローズしている場合AsynchronousCloseException
- 書き込み操作の進行中に別のスレッドによってこのチャネルがクローズされた場合ClosedByInterruptException
- 書き込み中に別のスレッドからの割り込みがあったためにチャネルがクローズし、現在のスレッドの割り込みステータスが設定された場合IOException
- その他の入出力エラーが発生した場合 バグまたは機能を送信
詳細な API リファレンスおよび開発者ドキュメントについては、Java SE のドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.