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
がスローされます。
A
- 接続のタイプ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
がスローされます。
A
- 接続のタイプ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, 2014, Oracle and/or its affiliates. All rights reserved.