public abstract class AsynchronousSocketChannel extends Object implements AsynchronousByteChannel, NetworkChannel
非同期ソケットチャネルは、2 つの方法のうちのいずれかで作成されます。新しく作成された AsynchronousSocketChannel
は、このクラスによって定義された open
メソッドの 1 つを呼び出すことで作成されます。新しく作成されたチャネルはオープンですが、接続は確立されていません。AsynchronousServerSocketChannel
のソケットへの接続が確立されると、接続された AsynchronousSocketChannel
が作成されます。任意の既存の socket
の非同期ソケットチャネルを作成することはできません。
新しく作成されたチャネルは、その connect
メソッドを呼び出すことで接続されます。接続後、チャネルは閉じられるまで接続されたままになります。ソケットチャネルが接続されているかどうかは、getRemoteAddress
メソッドの呼び出しによって判断できます。未接続のチャネルに対して入力操作を呼び出そうとすると、NotYetConnectedException
がスローされます。
この型のチャネルは、複数のスレッドで並行して使用できます。並行読み取りおよび書き込みがサポートされますが、最大で 1 つの読み取り操作と 1 つの書き込み操作が常に未処理になる可能性があります。前の読み取り操作が終了する前にスレッドが読み取り操作を開始すると、ReadPendingException
がスローされます。同様に、前の書き込みが終了する前に書き込み操作を開始しようとすると、WritePendingException
がスローされます。
ソケットオプションは setOption
メソッドを使用して構成されます。非同期ソケットチャネルでは次のオプションがサポートされます。
追加 (実装固有) のオプションをサポートできる場合もあります。
オプション名 説明 SO_SNDBUF
ソケット送信バッファーのサイズ SO_RCVBUF
ソケット受信バッファーのサイズ SO_KEEPALIVE
接続をキープアライブにします SO_REUSEADDR
アドレスを再利用します TCP_NODELAY
Nagle アルゴリズムを無効にします
このクラスによって定義される read
メソッドと write
メソッドを使用すると、読み取りまたは書き込み操作の開始時にタイムアウトを指定することができます。操作が終了する前にタイムアウトが経過した場合、操作は例外 InterruptedByTimeoutException
で終了します。タイムアウトによって、チャネルまたは基本となる接続が整合性のない状態のままになることがあります。バイトがチャネルから読み取られていないことを実装で保証できない場合、チャネルは実装に固有のエラー状態になります。そのあとで read
操作を開始しようとすると、未指定のランタイム例外がスローされます。同様に、write
操作がタイムアウトになり、バイトがチャネルに書き込まれていないことを実装で保証できない場合、チャネルへの write
をさらに試行すると、未指定のランタイム例外がスローされます。タイムアウトが経過すると、入出力操作の ByteBuffer
の状態またはバッファーシーケンスは定義されません。バッファーは破棄するか、少なくともチャネルが開いたままになっている間はバッファーへのアクセスが行われないように注意する必要があります。timeout パラメータを受け入れるすべてのメソッドで、ゼロ以下の値を、入出力操作がタイムアウトにならないものとして扱います。
修飾子 | コンストラクタと説明 |
---|---|
protected |
AsynchronousSocketChannel(AsynchronousChannelProvider provider)
このクラスの新しいインスタンスを初期化します。
|
修飾子と型 | メソッドと説明 |
---|---|
abstract AsynchronousSocketChannel |
bind(SocketAddress local)
チャネルのソケットをローカルアドレスにバインドします。
|
abstract Future<Void> |
connect(SocketAddress remote)
このチャネルを接続します。
|
abstract <A> void |
connect(SocketAddress remote, A attachment, CompletionHandler<Void,? super A> handler)
このチャネルを接続します。
|
abstract SocketAddress |
getRemoteAddress()
このチャネルのソケットが接続されているリモートアドレスを返します。
|
static AsynchronousSocketChannel |
open()
非同期のソケットチャネルを開きます。
|
static AsynchronousSocketChannel |
open(AsynchronousChannelGroup group)
非同期のソケットチャネルを開きます。
|
AsynchronousChannelProvider |
provider()
このチャネルの作成元プロバイダを返します。
|
abstract Future<Integer> |
read(ByteBuffer dst)
このチャネルのバイトシーケンスを指定のバッファーに読み込みます。
|
abstract <A> void |
read(ByteBuffer[] dsts, int offset, int length, long timeout, TimeUnit unit, A attachment, CompletionHandler<Long,? super A> handler)
このチャネルのバイトシーケンスを指定されたバッファーのサブシーケンスに読み込みます。
|
<A> void |
read(ByteBuffer dst, A attachment, CompletionHandler<Integer,? super A> handler)
このチャネルのバイトシーケンスを指定のバッファーに読み込みます。
|
abstract <A> void |
read(ByteBuffer dst, long timeout, TimeUnit unit, A attachment, CompletionHandler<Integer,? super A> handler)
このチャネルのバイトシーケンスを指定のバッファーに読み込みます。
|
abstract <T> AsynchronousSocketChannel |
setOption(SocketOption<T> name, T value)
ソケットオプションの値を設定します。
|
abstract AsynchronousSocketChannel |
shutdownInput()
チャネルを閉じずに読み込むための接続をシャットダウンします。
|
abstract AsynchronousSocketChannel |
shutdownOutput()
チャネルを閉じずに書き込むための接続をシャットダウンします。
|
abstract Future<Integer> |
write(ByteBuffer src)
このチャネルのバイトシーケンスを指定のバッファーから書き出します。
|
abstract <A> void |
write(ByteBuffer[] srcs, int offset, int length, long timeout, TimeUnit unit, A attachment, CompletionHandler<Long,? super A> handler)
このチャネルのバイトシーケンスを指定されたバッファーのサブシーケンスから書き出します。
|
<A> void |
write(ByteBuffer src, A attachment, CompletionHandler<Integer,? super A> handler)
このチャネルのバイトシーケンスを指定のバッファーから書き出します。
|
abstract <A> void |
write(ByteBuffer src, long timeout, TimeUnit unit, A attachment, CompletionHandler<Integer,? super A> handler)
このチャネルのバイトシーケンスを指定のバッファーから書き出します。
|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
close
getLocalAddress, getOption, supportedOptions
protected AsynchronousSocketChannel(AsynchronousChannelProvider provider)
public final AsynchronousChannelProvider provider()
public static AsynchronousSocketChannel open(AsynchronousChannelGroup group) throws IOException
グループを作成した AsynchronousChannelProvider
で openAsynchronousSocketChannel
メソッドを呼び出すことで、新しいチャネルが作成されます。group パラメータが null
の場合、結果のチャネルは、システム全体のデフォルトプロバイダによって作成され、デフォルトグループにバインドされます。
group
- 新たに構築されたチャネルのバインド先のグループ、またはデフォルトグループの場合は null
ShutdownChannelGroupException
- チャネルグループがシャットダウンしている場合IOException
- 入出力エラーが発生した場合public static AsynchronousSocketChannel open() throws IOException
このメソッドは、デフォルトグループにバインドされている非同期ソケットチャネルを返します。このメソッドの呼び出しは次の式の評価と等価です。
open((AsynchronousChannelGroup)null);
IOException
- 入出力エラーが発生した場合public abstract AsynchronousSocketChannel bind(SocketAddress local) throws IOException
NetworkChannel
このメソッドは、ソケットとローカルアドレスとの間の関連付けを確立するために使用されます。関連付けが確立されると、ソケットはチャネルが閉じられるまでバインドされたままになります。local
パラメータの値が null
の場合、ソケットは自動的に割り当てられるアドレスにバインドされます。
bind
、インタフェース: NetworkChannel
local
- ソケットのバインド先のアドレス、または自動的に割り当てられるソケットアドレスにソケットをバインドする場合は null
ConnectionPendingException
- このチャネルで接続操作がすでに進行中である場合AlreadyBoundException
- ソケットがすでにバインドされている場合UnsupportedAddressTypeException
- 指定されたアドレスのタイプがサポート対象外の場合ClosedChannelException
- チャネルがクローズしている場合IOException
- その他の入出力エラーが発生した場合NetworkChannel.getLocalAddress()
public abstract <T> AsynchronousSocketChannel setOption(SocketOption<T> name, T value) throws IOException
NetworkChannel
setOption
、インタフェース: NetworkChannel
name
- ソケットオプションvalue
- ソケットオプションの値。一部のソケットオプションに対しては、null
の値が有効な値である場合があります。IllegalArgumentException
- 値がこのソケットオプションに対して有効な値でない場合ClosedChannelException
- このチャネルがクローズしている場合IOException
- 入出力エラーが発生した場合StandardSocketOptions
public abstract AsynchronousSocketChannel shutdownInput() throws IOException
読み取り用にシャットダウンしたあとに、さらにそのチャネルで読み取りを行うと、ストリームの終わりを示す -1
が返されます。接続の入力側がすでにシャットダウンされている場合は、このメソッドを呼び出しても何の効果もありません。未処理の読み取り操作に対する影響はシステムによって異なるため、指定されません。読み取られていないソケット受信バッファーにデータがあるか、データが続けて受信されたときに影響を受ける場合、その影響もシステムによって異なります。
NotYetConnectedException
- このチャネルがまだ接続されていない場合ClosedChannelException
- このチャネルがクローズしている場合IOException
- その他の入出力エラーが発生した場合public abstract AsynchronousSocketChannel shutdownOutput() throws IOException
書き込み用にシャットダウンしたあとに、さらにそのチャネルに書き込もうとすると、ClosedChannelException
がスローされます。接続の出力側がすでにシャットダウンされている場合は、このメソッドを呼び出しても何の効果もありません。未処理の書き込み操作に対する影響はシステムによって異なるため、指定されません。
NotYetConnectedException
- このチャネルがまだ接続されていない場合ClosedChannelException
- このチャネルがクローズしている場合IOException
- その他の入出力エラーが発生した場合public abstract SocketAddress getRemoteAddress() throws IOException
チャネルが IP ソケットアドレスにバインドおよび接続されている場合は、このメソッドからの戻り値の型は InetSocketAddress
です。
null
ClosedChannelException
- チャネルがクローズしている場合IOException
- 入出力エラーが発生した場合public abstract <A> void connect(SocketAddress remote, A attachment, CompletionHandler<Void,? super A> handler)
このメソッドは、このチャネルを接続する操作を開始します。handler
パラメータは、接続が正常に確立されたか接続を確立できないときに呼び出される終了ハンドラです。接続を確立できない場合、チャネルは閉じられます。
このメソッドは、Socket
クラスとまったく同じセキュリティーチェックを行います。つまり、セキュリティーマネージャーがインストールされている場合、このメソッドは、その checkConnect
メソッドが指定されたリモートエンドポイントのアドレスおよびポート番号への接続を許可することを確認します。
remote
- このチャネルの接続先リモートアドレスattachment
- 入出力操作に接続されるオブジェクト。null
も可handler
- 結果を消費するためのハンドラUnresolvedAddressException
- 指定されたリモートアドレスが完全に解決されない場合UnsupportedAddressTypeException
- 指定されたリモートアドレスのタイプがサポート対象外の場合AlreadyConnectedException
- このチャネルがすでに接続されている場合ConnectionPendingException
- このチャネルで接続操作がすでに進行中である場合ShutdownChannelGroupException
- チャネルグループが終了している場合SecurityException
- セキュリティーマネージャーがインストールされていて、指定されたリモートエンドポイントへのアクセスが許可されていない場合getRemoteAddress()
public abstract Future<Void> connect(SocketAddress remote)
このメソッドは、このチャネルを接続する操作を開始します。このメソッドは、connect(SocketAddress, Object, CompletionHandler)
メソッドとまったく同じように動作します。ただし、終了ハンドラを指定する代わりに、このメソッドは保留状態の結果を表す Future
を返します。Future
の get
メソッドは、正常に完了すると null
を返します。
remote
- このチャネルの接続先リモートアドレスFuture
オブジェクトUnresolvedAddressException
- 指定されたリモートアドレスが完全に解決されない場合UnsupportedAddressTypeException
- 指定されたリモートアドレスのタイプがサポート対象外の場合AlreadyConnectedException
- このチャネルがすでに接続されている場合ConnectionPendingException
- このチャネルで接続操作がすでに進行中である場合SecurityException
- セキュリティーマネージャーがインストールされていて、指定されたリモートエンドポイントへのアクセスが許可されていない場合public abstract <A> void read(ByteBuffer dst, long timeout, TimeUnit unit, A attachment, CompletionHandler<Integer,? super A> handler)
このメソッドは、このチャネルのバイトシーケンスを指定のバッファーに読み取るための非同期読み込み操作を開始します。handler
パラメータは、読み取り操作が終了 (または失敗) したときに呼び出される終了ハンドラです。終了ハンドラに渡される結果は、読み取られたバイト数、またチャネルがストリームの終わりに達したためにバイトが読み取れなかった場合は -1
。
タイムアウトが指定され、操作が終了する前にタイムアウトが経過した場合は、操作は例外 InterruptedByTimeoutException
で終了します。タイムアウトが発生し、バイトが読み取られていないか、チャネルから指定したバッファーに読み取られないことを実装で保証できない場合、チャネルからさらに読み取ろうとすると、詳細不明なランタイム例外がスローされます。
それ以外の場合は、このメソッドは AsynchronousByteChannel.read(ByteBuffer,Object,CompletionHandler)
メソッドとまったく同じように動作します。
dst
- バイトの転送先バッファーtimeout
- 入出力操作が完了するための最大時間unit
- timeout
引数の時間単位attachment
- 入出力操作に接続されるオブジェクト。null
も可handler
- 結果を消費するためのハンドラIllegalArgumentException
- バッファーが読み取り専用である場合ReadPendingException
- このチャネルで読み取り操作がすでに進行中である場合NotYetConnectedException
- このチャネルがまだ接続されていない場合ShutdownChannelGroupException
- チャネルグループが終了している場合public final <A> void read(ByteBuffer dst, A attachment, CompletionHandler<Integer,? super A> handler)
AsynchronousByteChannel
このメソッドは、このチャネルのバイトシーケンスを指定のバッファーに読み取るための非同期読み込み操作を開始します。handler
パラメータは、読み取り操作が終了 (または失敗) したときに呼び出される終了ハンドラです。終了ハンドラに渡される結果は、読み取られたバイト数、またチャネルがストリームの終わりに達したためにバイトが読み取れなかった場合は -1
。
読み取り操作は、チャネルから最大 r バイトを読み取ります。r は、読み取りが試行されたときにバッファー内に残っているバイト数、dst.remaining()
になります。r が 0 の場合は、入出力操作を開始することなく読み取り操作はただちに終了し、結果は 0
になります。
長さ n (0 < n <= r) のバイトシーケンスが読み取られるとします。このバイトシーケンスがバッファーに転送されるため、シーケンス内の最初のバイトのインデックスは p、最後のバイトのインデックスは p + n - 1 になります。なお、p は、読み取りが実行されるときのバッファーの位置です。バッファーの位置は、終了時に p + n に等しくなります。リミットに変化はありません。
バッファーは、複数のスレッドで並行して使用できないため、操作が完了するまでバッファーにアクセスしないように注意してください。
このメソッドはいつでも呼び出すことができます。チャネルタイプによっては、特定の時点で複数の読み取りが未処理になることが許可されない場合があります。前の読み取り操作が終了する前にスレッドが読み取り操作を開始すると、ReadPendingException
がスローされます。
read
、インタフェース: AsynchronousByteChannel
dst
- バイトの転送先バッファーattachment
- 入出力操作に接続されるオブジェクト。null
も可handler
- 終了ハンドラIllegalArgumentException
- バッファーが読み取り専用である場合ReadPendingException
- 特定の時点で複数の読み取りが未処理になることをチャネルが許可せず、前の読み取りが終了していない場合NotYetConnectedException
- このチャネルがまだ接続されていない場合ShutdownChannelGroupException
- チャネルグループが終了している場合public abstract Future<Integer> read(ByteBuffer dst)
AsynchronousByteChannel
このメソッドは、このチャネルのバイトシーケンスを指定のバッファーに読み取るための非同期読み込み操作を開始します。このメソッドは、read(ByteBuffer,Object,CompletionHandler)
メソッドとまったく同じように動作します。ただし、終了ハンドラを指定する代わりに、このメソッドは保留状態の結果を表す Future
を返します。Future
の get
メソッドは、読み取られたバイト数、またチャネルがストリームの終わりに達したためにバイトが読み込めなかった場合は -1
を返します。
read
、インタフェース: AsynchronousByteChannel
dst
- バイトの転送先バッファーIllegalArgumentException
- バッファーが読み取り専用である場合ReadPendingException
- 特定の時点で複数の読み取りが未処理になることをチャネルが許可せず、前の読み取りが終了していない場合NotYetConnectedException
- このチャネルがまだ接続されていない場合public abstract <A> void read(ByteBuffer[] dsts, int offset, int length, long timeout, TimeUnit unit, A attachment, CompletionHandler<Long,? super A> handler)
handler
パラメータは、読み取り操作が終了 (または失敗) したときに呼び出される終了ハンドラです。終了ハンドラに渡される結果は、読み取られたバイト数、またチャネルがストリームの終わりに達したためにバイトが読み取れなかった場合は -1
。
このメソッドは、このチャネルから最大 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] に転送されます。バイトシーケンス全部が指定されたバッファーに転送されるまで、この処理が繰り返されます。各バッファーには最大限のバイトが転送されるため、最終更新バッファーを除く個々の更新バッファーの最終的な位置は、このバッファーのリミットと等しくなります。基本となるオペレーティングシステムが、入出力操作で使用できるバッファーの数に制限を課す場合があります。(バイトが残っている) バッファーの数がこの制限を超えると、入出力操作はオペレーティングシステムが許可するバッファーの最大数で実行されます。
タイムアウトが指定され、操作が終了する前にタイムアウトが経過した場合は、例外 InterruptedByTimeoutException
で終了します。タイムアウトが発生し、バイトが読み取られていないか、チャネルから指定したバッファーに読み取られないことを実装で保証できない場合、チャネルからさらに読み取ろうとすると、詳細不明なランタイム例外がスローされます。
dsts
- バイトの転送先バッファーoffset
- バイトの転送先となる最初のバッファー配列内のオフセット。dsts.length
以下の負でない値である必要がありますlength
- アクセスされる最大バッファー数。dsts.length - offset
以下の負でない値である必要がありますtimeout
- 入出力操作が完了するための最大時間unit
- timeout
引数の時間単位attachment
- 入出力操作に接続されるオブジェクト。null
も可handler
- 結果を消費するためのハンドラIndexOutOfBoundsException
- offset
および length
パラメータの事前条件が満たされない場合IllegalArgumentException
- バッファーが読み取り専用である場合ReadPendingException
- このチャネルで読み取り操作がすでに進行中である場合NotYetConnectedException
- このチャネルがまだ接続されていない場合ShutdownChannelGroupException
- チャネルグループが終了している場合public abstract <A> void write(ByteBuffer src, long timeout, TimeUnit unit, A attachment, CompletionHandler<Integer,? super A> handler)
このメソッドは、バイトシーケンスを指定のバッファーからこのチャネルに書き込むための非同期書き込み操作を開始します。handler
パラメータは、書き込み操作が終了 (または失敗) したときに呼び出される終了ハンドラです。終了ハンドラに渡される結果は、書き込まれたバイト数です。
タイムアウトが指定され、操作が終了する前にタイムアウトが経過した場合は、例外 InterruptedByTimeoutException
で終了します。タイムアウトが発生し、バイトが書き込まれていないか、指定したバッファーからチャネルに書き込まれないことを実装で保証できない場合、チャネルにさらに書き込もうとすると、詳細不明なランタイム例外がスローされます。
それ以外の場合は、このメソッドは AsynchronousByteChannel.write(ByteBuffer,Object,CompletionHandler)
メソッドとまったく同じように動作します。
src
- バイトの取得先バッファーtimeout
- 入出力操作が完了するための最大時間unit
- timeout
引数の時間単位attachment
- 入出力操作に接続されるオブジェクト。null
も可handler
- 結果を消費するためのハンドラWritePendingException
- このチャネルで書き込み操作がすでに進行中である場合NotYetConnectedException
- このチャネルがまだ接続されていない場合ShutdownChannelGroupException
- チャネルグループが終了している場合public final <A> void write(ByteBuffer src, A attachment, CompletionHandler<Integer,? super A> handler)
AsynchronousByteChannel
このメソッドは、バイトシーケンスを指定のバッファーからこのチャネルに書き込むための非同期書き込み操作を開始します。handler
パラメータは、書き込み操作が終了 (または失敗) したときに呼び出される終了ハンドラです。終了ハンドラに渡される結果は、書き込まれたバイト数です。
書き込み操作は、チャネルに最大 r バイトを書き込みます。r は、書き込みが試行されたときにバッファー内に残っているバイト数、src.remaining()
になります。r が 0 の場合は、入出力操作を開始することな書き込み操作はただちに終了し、結果は 0
になります。
長さ n (0 < n <= r) のバイトシーケンスが書き込まれるとします。このバイトシーケンスは、バッファーのインデックス p から転送されます。p は、書き込みが実行されるときのバッファーの位置です。書き込まれる最後のバイトのインデックスは p + n - 1 になります。バッファーの位置は、終了時に p + n に等しくなります。リミットに変化はありません。
バッファーは、複数のスレッドで並行して使用できないため、操作が完了するまでバッファーにアクセスしないように注意してください。
このメソッドはいつでも呼び出すことができます。チャネルタイプによっては、特定の時点で複数の書き込みが未処理になることが許可されない場合があります。前の書き込み操作が終了する前にスレッドが書き込み操作を開始すると、WritePendingException
がスローされます。
write
、インタフェース: AsynchronousByteChannel
src
- バイトの取得先バッファーattachment
- 入出力操作に接続されるオブジェクト。null
も可handler
- 終了ハンドラオブジェクトWritePendingException
- 特定の時点で複数の書き込みが未処理になることをチャネルが許可せず、前の書き込みが終了していない場合NotYetConnectedException
- このチャネルがまだ接続されていない場合ShutdownChannelGroupException
- チャネルグループが終了している場合public abstract Future<Integer> write(ByteBuffer src)
AsynchronousByteChannel
このメソッドは、バイトシーケンスを指定のバッファーからこのチャネルに書き込むための非同期書き込み操作を開始します。このメソッドは、write(ByteBuffer,Object,CompletionHandler)
メソッドとまったく同じように動作します。ただし、終了ハンドラを指定する代わりに、このメソッドは保留状態の結果を表す Future
を返します。Future
の get
メソッドは書き込まれたバイト数を返します。
write
、インタフェース: AsynchronousByteChannel
src
- バイトの取得先バッファーWritePendingException
- 特定の時点で複数の書き込みが未処理になることをチャネルが許可せず、前の書き込みが終了していない場合NotYetConnectedException
- このチャネルがまだ接続されていない場合public abstract <A> void write(ByteBuffer[] srcs, int offset, int length, long timeout, TimeUnit unit, A attachment, CompletionHandler<Long,? super A> handler)
handler
パラメータは、書き込み操作が終了 (または失敗) したときに呼び出される終了ハンドラです。終了ハンドラに渡される結果は、書き込まれたバイト数です。
このメソッドは、このチャネルへの最大 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] から書き込まれます。バイトシーケンス全部が書き込まれるまで、この処理が繰り返されます。各バッファーから最大限のバイト数が書き込まれるため、更新された個々のバッファーの最終的な位置は、最終更新バッファーを除いて、このバッファーのリミットと等しくなります。基本となるオペレーティングシステムが、入出力操作で使用できるバッファーの数に制限を課す場合があります。(バイトが残っている) バッファーの数がこの制限を超えると、入出力操作はオペレーティングシステムが許可するバッファーの最大数で実行されます。
タイムアウトが指定され、操作が終了する前にタイムアウトが経過した場合は、例外 InterruptedByTimeoutException
で終了します。タイムアウトが発生し、バイトが書き込まれていないか、指定したバッファーからチャネルに書き込まれないことを実装で保証できない場合、チャネルにさらに書き込もうとすると、詳細不明なランタイム例外がスローされます。
srcs
- バイトの取得先バッファーoffset
- バイトの取得元となる最初のバッファー配列内のオフセット。srcs.length
以下の負でない値である必要がありますlength
- アクセスされる最大バッファー数。srcs.length - offset
以下の負でない値である必要がありますtimeout
- 入出力操作が完了するための最大時間unit
- timeout
引数の時間単位attachment
- 入出力操作に接続されるオブジェクト。null
も可handler
- 結果を消費するためのハンドラIndexOutOfBoundsException
- offset
および length
パラメータの事前条件が満たされない場合WritePendingException
- このチャネルで書き込み操作がすでに進行中である場合NotYetConnectedException
- このチャネルがまだ接続されていない場合ShutdownChannelGroupException
- チャネルグループが終了している場合 バグまたは機能を送信
詳細な API リファレンスおよび開発者ドキュメントについては、Java SE のドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.