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, 2014, Oracle and/or its affiliates. All rights reserved.