モジュール java.base
パッケージ java.nio.channels

インタフェースGatheringByteChannel

すべてのスーパー・インタフェース:
AutoCloseable, Channel, Closeable, WritableByteChannel
既知のすべての実装クラス:
DatagramChannel, FileChannel, Pipe.SinkChannel, SocketChannel

public interface GatheringByteChannel
extends WritableByteChannel
バッファ・シーケンスからバイトを書き込むことができるチャネルです。

この「収集」書込み操作では、1回の呼出しで、指定した1つ以上のバッファ・シーケンスから連続する複数のバイト(バイト・シーケンス)を書き込むことができます。 「収集」書込みは、通常、ネットワーク・プロトコルやファイル形式(たとえば、データを1個以上の固定長のヘッダーと可変長の本体から成るセグメントにグループ化するようなファイル形式)を実装する際に便利です。 これに類似した「分散」読込み操作は、ScatteringByteChannelインタフェースで定義されます。

導入されたバージョン:
1.4
  • メソッドのサマリー

    修飾子と型 メソッド 説明
    long write​(ByteBuffer[] srcs)
    このチャネルのバイト・シーケンスを指定されたバッファから書き出します。
    long write​(ByteBuffer[] srcs, int offset, int length)
    このチャネルのバイト・シーケンスを指定されたバッファのサブシーケンスから書き出します。

    インタフェース java.nio.channels.Channelで宣言されたメソッド

    close, isOpen

    インタフェース java.nio.channels.WritableByteChannelで宣言されたメソッド

    write
  • メソッドの詳細

    • 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 - その他の入出力エラーが発生した場合
    • write

      long write​(ByteBuffer[] srcs) throws IOException
      このチャネルのバイト・シーケンスを指定されたバッファから書き出します。

      このメソッドをc.write(srcs)の形式で呼び出した場合、次の呼び出しと同じ結果が得られます。

       c.write(srcs, 0, srcs.length);

      パラメータ:
      srcs - バイトの取得先バッファ
      戻り値:
      書き込まれるバイト数。ゼロの場合もある
      例外:
      NonWritableChannelException - このチャネルが書込み可能でない場合
      ClosedChannelException - このチャネルがクローズしている場合
      AsynchronousCloseException - 書込み操作の進行中に別のスレッドによってこのチャネルがクローズされた場合
      ClosedByInterruptException - 書込み中に別のスレッドからの割込みがあったためにチャネルがクローズし、現在のスレッドの割込みステータスが設定された場合
      IOException - その他の入出力エラーが発生した場合