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

インタフェースScatteringByteChannel

すべてのスーパー・インタフェース:
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.Channelで宣言されたメソッド

    close, isOpen

    インタフェース 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 - その他の入出力エラーが発生した場合