public interface AsynchronousByteChannel extends AsynchronousChannel
チャネルによっては、特定の時点で複数の読み取りまたは書き込みが未処理になることが許可されない場合があります。前の読み取り操作が完了する前にスレッドが read メソッドを呼び出すと、ReadPendingException
がスローされます。同様に、前の書き込みが完了する前に write メソッドが呼び出されると、WritePendingException
がスローされます。読み込み操作とその他の入出力操作を同時並行で実行できるかどうかは、チャネルの種類によって決まります。
ByteBuffers
は、複数のスレッドで並行して使用することはできません。読み取り操作または書き込み操作を開始するときは、操作が完了するまでバッファーへのアクセスが行われないよう注意する必要があります。
修飾子と型 | メソッドと説明 |
---|---|
Future<Integer> |
read(ByteBuffer dst)
このチャネルのバイトシーケンスを指定のバッファーに読み込みます。
|
<A> void |
read(ByteBuffer dst, A attachment, CompletionHandler<Integer,? super A> handler)
このチャネルのバイトシーケンスを指定のバッファーに読み込みます。
|
Future<Integer> |
write(ByteBuffer src)
このチャネルのバイトシーケンスを指定のバッファーから書き出します。
|
<A> void |
write(ByteBuffer src, A attachment, CompletionHandler<Integer,? super A> handler)
このチャネルのバイトシーケンスを指定のバッファーから書き出します。
|
close
<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
がスローされます。
dst
- バイトの転送先バッファーattachment
- 入出力操作に接続されるオブジェクト。null
も可handler
- 終了ハンドラIllegalArgumentException
- バッファーが読み取り専用である場合ReadPendingException
- 特定の時点で複数の読み取りが未処理になることをチャネルが許可せず、前の読み取りが終了していない場合ShutdownChannelGroupException
- チャネルが終了した group
に関連付けられている場合Future<Integer> read(ByteBuffer dst)
このメソッドは、このチャネルのバイトシーケンスを指定のバッファーに読み取るための非同期読み込み操作を開始します。このメソッドは、read(ByteBuffer,Object,CompletionHandler)
メソッドとまったく同じように動作します。ただし、終了ハンドラを指定する代わりに、このメソッドは保留状態の結果を表す Future
を返します。Future
の get
メソッドは、読み取られたバイト数、またチャネルがストリームの終わりに達したためにバイトが読み込めなかった場合は -1
を返します。
dst
- バイトの転送先バッファーIllegalArgumentException
- バッファーが読み取り専用である場合ReadPendingException
- 特定の時点で複数の読み取りが未処理になることをチャネルが許可せず、前の読み取りが終了していない場合<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
がスローされます。
src
- バイトの取得先バッファーattachment
- 入出力操作に接続されるオブジェクト。null
も可handler
- 終了ハンドラオブジェクトWritePendingException
- 特定の時点で複数の書き込みが未処理になることをチャネルが許可せず、前の書き込みが終了していない場合ShutdownChannelGroupException
- チャネルが終了した group
に関連付けられている場合Future<Integer> write(ByteBuffer src)
このメソッドは、バイトシーケンスを指定のバッファーからこのチャネルに書き込むための非同期書き込み操作を開始します。このメソッドは、write(ByteBuffer,Object,CompletionHandler)
メソッドとまったく同じように動作します。ただし、終了ハンドラを指定する代わりに、このメソッドは保留状態の結果を表す Future
を返します。Future
の get
メソッドは書き込まれたバイト数を返します。
src
- バイトの取得先バッファーWritePendingException
- 特定の時点で複数の書き込みが未処理になることをチャネルが許可せず、前の書き込みが終了していない場合 バグまたは機能を送信
詳細な API リファレンスおよび開発者ドキュメントについては、Java SE のドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.