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

インタフェースAsynchronousByteChannel

  • すべてのスーパー・インタフェース:
    AsynchronousChannel, AutoCloseable, Channel, Closeable
    既知のすべての実装クラス:
    AsynchronousSocketChannel

    public interface AsynchronousByteChannel
    extends AsynchronousChannel
    バイトの読取りと書込みができる非同期チャネルです。

    チャネルによっては、特定の時点で複数の読み取りまたは書込みが未処理になることが許可されない場合があります。 前の読取り操作が完了する前にスレッドがreadメソッドを呼び出すと、ReadPendingExceptionがスローされます。 同様に、前の書込みが完了する前にwriteメソッドが呼び出されると、WritePendingExceptionがスローされます。 読込み操作とその他の入出力操作を同時並行で実行できるかどうかは、チャネルの種類によって決まります。

    ByteBuffersは、複数のスレッドで並行して使用することはできません。 読取り操作または書込み操作を開始するときは、操作が完了するまでバッファへのアクセスが行われないよう注意する必要があります。

    導入されたバージョン:
    1.7
    関連項目:
    Channels.newInputStream(AsynchronousByteChannel), Channels.newOutputStream(AsynchronousByteChannel)
    • メソッドの詳細

      • read

        <A> void read​(ByteBuffer dst,
                      A attachment,
                      CompletionHandler<Integer,? super A> handler)
        このチャネルのバイト・シーケンスを指定のバッファに読み込みます。

        このメソッドは、このチャネルのバイト・シーケンスを指定のバッファに読み取るための非同期読込み操作を開始します。 handlerパラメータは、読取り操作が終了(または失敗)したときに呼び出される終了ハンドラです。 終了ハンドラに渡される結果は、読み取られたバイト数、またチャネルがストリームの終わりに達したためにバイトが読み取れなかった場合は-1

        読取り操作は、チャネルから最大rバイトを読み取ります。rは、読取りが試行されたときにバッファ内に残っているバイト数、dst.remaining()になります。 rが0の場合は、入出力操作を開始することなく読取り操作はただちに終了し、結果は0になります。

        長さn (0 < n <= r)のバイト・シーケンスが読み取られるとします。 このバイト・シーケンスがバッファに転送されるため、シーケンス内の最初のバイトのインデックスはp、最後のバイトのインデックスはp + n - 1になります。なお、pは、読取りが実行されるときのバッファの位置です。 バッファの位置は、終了時にp + nに等しくなります。リミットに変化はありません。

        バッファは、複数のスレッドで並行して使用できないため、操作が完了するまでバッファにアクセスしないように注意してください。

        このメソッドはいつでも呼び出すことができます。 チャネル・タイプによっては、特定の時点で複数の読取りが未処理になることが許可されない場合があります。 前の読取り操作が終了する前にスレッドが読取り操作を開始すると、ReadPendingExceptionがスローされます。

        型パラメータ:
        A - 接続のタイプ
        パラメータ:
        dst - バイトの転送先バッファ
        attachment - 入出力操作に接続されるオブジェクト。nullも可
        handler - 終了ハンドラ
        例外:
        IllegalArgumentException - バッファが読取り専用である場合
        ReadPendingException - 特定の時点で複数の読取りが未処理になることをチャネルが許可せず、前の読取りが終了していない場合
        ShutdownChannelGroupException - チャネルが終了したgroupに関連付けられている場合
      • read

        Future<Integer> read​(ByteBuffer dst)
        このチャネルのバイト・シーケンスを指定のバッファに読み込みます。

        このメソッドは、このチャネルのバイト・シーケンスを指定のバッファに読み取るための非同期読込み操作を開始します。 このメソッドは、read(ByteBuffer,Object,CompletionHandler)メソッドとまったく同じように動作します。ただし、終了ハンドラを指定する代わりに、このメソッドは保留状態の結果を表すFutureを返します。 Futuregetメソッドは、読み取られたバイト数、またチャネルがストリームの終わりに達したためにバイトが読み込めなかった場合は-1を返します。

        パラメータ:
        dst - バイトの転送先バッファ
        戻り値:
        操作の結果を表すFuture
        例外:
        IllegalArgumentException - バッファが読取り専用である場合
        ReadPendingException - 特定の時点で複数の読取りが未処理になることをチャネルが許可せず、前の読取りが終了していない場合
      • write

        <A> void write​(ByteBuffer src,
                       A attachment,
                       CompletionHandler<Integer,? super A> handler)
        このチャネルのバイト・シーケンスを指定のバッファから書き出します。

        このメソッドは、バイト・シーケンスを指定のバッファからこのチャネルに書き込むための非同期書込み操作を開始します。 handlerパラメータは、書込み操作が終了(または失敗)したときに呼び出される終了ハンドラです。 終了ハンドラに渡される結果は、書き込まれたバイト数です。

        書込み操作は、チャネルに最大rバイトを書き込みます。rは、書込みが試行されたときにバッファ内に残っているバイト数、src.remaining()になります。 rが0の場合は、入出力操作を開始することな書込み操作はただちに終了し、結果は0になります。

        長さn (0 < n <= r)のバイト・シーケンスが書き込まれるとします。 このバイト・シーケンスは、バッファのインデックスpから転送されます。pは、書込みが実行されるときのバッファの位置です。書き込まれる最後のバイトのインデックスはp + n - 1になります。 バッファの位置は、終了時にp + nに等しくなります。リミットに変化はありません。

        バッファは、複数のスレッドで並行して使用できないため、操作が完了するまでバッファにアクセスしないように注意してください。

        このメソッドはいつでも呼び出すことができます。 チャネル・タイプによっては、特定の時点で複数の書込みが未処理になることが許可されない場合があります。 前の書込み操作が終了する前にスレッドが書込み操作を開始すると、WritePendingExceptionがスローされます。

        型パラメータ:
        A - 接続のタイプ
        パラメータ:
        src - バイトの取得先バッファ
        attachment - 入出力操作に接続されるオブジェクト。nullも可
        handler - 終了ハンドラ・オブジェクト
        例外:
        WritePendingException - 特定の時点で複数の書込みが未処理になることをチャネルが許可せず、前の書込みが終了していない場合
        ShutdownChannelGroupException - チャネルが終了したgroupに関連付けられている場合
      • write

        Future<Integer> write​(ByteBuffer src)
        このチャネルのバイト・シーケンスを指定のバッファから書き出します。

        このメソッドは、バイト・シーケンスを指定のバッファからこのチャネルに書き込むための非同期書込み操作を開始します。 このメソッドは、write(ByteBuffer,Object,CompletionHandler)メソッドとまったく同じように動作します。ただし、終了ハンドラを指定する代わりに、このメソッドは保留状態の結果を表すFutureを返します。 Futuregetメソッドは書き込まれたバイト数を返します。

        パラメータ:
        src - バイトの取得先バッファ
        戻り値:
        操作の結果を表すFuture
        例外:
        WritePendingException - 特定の時点で複数の書込みが未処理になることをチャネルが許可せず、前の書込みが終了していない場合