- java.lang.Object
-
- java.nio.channels.AsynchronousSocketChannel
-
- すべての実装されたインタフェース:
Closeable
,AutoCloseable
,AsynchronousByteChannel
,AsynchronousChannel
,Channel
,NetworkChannel
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パラメータを受け入れるすべてのメソッドで、ゼロ以下の値を、入出力操作がタイム・アウトにならないものとして扱います。- 導入されたバージョン:
- 1.7
-
-
コンストラクタのサマリー
コンストラクタ 修飾子 コンストラクタ 説明 protected
AsynchronousSocketChannel(AsynchronousChannelProvider provider)
このクラスの新しいインスタンスを初期化します。
-
メソッドのサマリー
すべてのメソッド staticメソッド インスタンス・メソッド 抽象メソッド 具象メソッド 修飾子と型 メソッド 説明 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
getLocalAddress()
このチャネルのソケットがバインドされているソケット・アドレスを返します。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)
このチャネルのバイト・シーケンスを指定されたバッファのサブシーケンスに読み込みます。abstract <A> void
read(ByteBuffer dst, long timeout, TimeUnit unit, A attachment, CompletionHandler<Integer,? super A> handler)
このチャネルのバイト・シーケンスを指定のバッファに読み込みます。<A> void
read(ByteBuffer dst, 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)
このチャネルのバイト・シーケンスを指定されたバッファのサブシーケンスから書き出します。abstract <A> void
write(ByteBuffer src, long timeout, TimeUnit unit, A attachment, CompletionHandler<Integer,? super A> handler)
このチャネルのバイト・シーケンスを指定のバッファから書き出します。<A> void
write(ByteBuffer src, A attachment, CompletionHandler<Integer,? super A> handler)
このチャネルのバイト・シーケンスを指定のバッファから書き出します。-
クラス java.lang.Objectで宣言されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
インタフェース java.nio.channels.AsynchronousChannelで宣言されたメソッド
close
-
インタフェース java.nio.channels.NetworkChannelで宣言されたメソッド
getOption, supportedOptions
-
-
-
-
コンストラクタの詳細
-
AsynchronousSocketChannel
protected AsynchronousSocketChannel(AsynchronousChannelProvider provider)
このクラスの新しいインスタンスを初期化します。- パラメータ:
provider
- このチャネルの作成元プロバイダ
-
-
メソッドの詳細
-
provider
public final AsynchronousChannelProvider provider()
このチャネルの作成元プロバイダを返します。- 戻り値:
- このチャネルの作成元プロバイダ
-
open
public static AsynchronousSocketChannel open(AsynchronousChannelGroup group) throws IOException
非同期のソケット・チャネルを開きます。グループを作成した
AsynchronousChannelProvider
でopenAsynchronousSocketChannel
メソッドを呼び出すことで、新しいチャネルが作成されます。 groupパラメータがnull
の場合、結果のチャネルは、システム全体のデフォルト・プロバイダによって作成され、デフォルト・グループにバインドされます。- パラメータ:
group
- 新たに構築されたチャネルのバインド先のグループ、またはデフォルト・グループの場合はnull
- 戻り値:
- 新しい非同期ソケット・チャネル
- 例外:
ShutdownChannelGroupException
- チャネル・グループがシャットダウンしている場合IOException
- 入出力エラーが発生した場合
-
open
public static AsynchronousSocketChannel open() throws IOException
非同期のソケット・チャネルを開きます。このメソッドは、デフォルト・グループにバインドされている非同期ソケット・チャネルを返します。このメソッドの呼び出しは次の式の評価と等価です。
open((AsynchronousChannelGroup)null);
- 戻り値:
- 新しい非同期ソケット・チャネル
- 例外:
IOException
- 入出力エラーが発生した場合
-
bind
public abstract AsynchronousSocketChannel bind(SocketAddress local) throws IOException
インタフェースからコピーされた説明:NetworkChannel
チャネルのソケットをローカル・アドレスにバインドします。このメソッドは、ソケットとローカル・アドレスとの間の関連付けを確立するために使用されます。 関連付けが確立されると、ソケットはチャネルが閉じられるまでバインドされたままになります。
local
パラメータの値がnull
の場合、ソケットは自動的に割り当てられるアドレスにバインドされます。- 定義:
bind
、インタフェースNetworkChannel
- パラメータ:
local
- ソケットのバインド先のアドレス、または自動的に割り当てられるソケット・アドレスにソケットをバインドする場合はnull
- 戻り値:
- このチャネル
- 例外:
ConnectionPendingException
- このチャネルですでに接続操作が実行中である場合AlreadyBoundException
- ソケットがすでにバインドされている場合UnsupportedAddressTypeException
- 指定されたアドレスのタイプがサポート対象外の場合ClosedChannelException
- チャネルがクローズしている場合IOException
- その他の入出力エラーが発生した場合SecurityException
- セキュリティ・マネージャがインストールされていて、checkListen
メソッドが操作を拒否した場合- 関連項目:
NetworkChannel.getLocalAddress()
-
setOption
public abstract <T> AsynchronousSocketChannel setOption(SocketOption<T> name, T value) throws IOException
インタフェースからコピーされた説明:NetworkChannel
ソケット・オプションの値を設定します。- 定義:
setOption
、インタフェースNetworkChannel
- 型パラメータ:
T
- ソケット・オプション値のタイプ- パラメータ:
name
- ソケット・オプションvalue
- ソケット・オプションの値。 一部のソケット・オプションに対しては、null
の値が有効な値である場合があります。- 戻り値:
- このチャネル
- 例外:
IllegalArgumentException
- 値がこのソケット・オプションに対して有効な値でない場合ClosedChannelException
- このチャネルがクローズしている場合IOException
- 入出力エラーが発生した場合- 関連項目:
StandardSocketOptions
-
shutdownInput
public abstract AsynchronousSocketChannel shutdownInput() throws IOException
チャネルを閉じずに読み込むための接続をシャットダウンします。読取り用にシャットダウンしたあとに、さらにそのチャネルで読取りを行うと、ストリームの終わりを示す
-1
が返されます。 接続の入力側がすでにシャットダウンされている場合は、このメソッドを呼び出しても何の効果もありません。 未処理の読取り操作に対する影響はシステムによって異なるため、指定されません。 読み取られていないソケット受信バッファにデータがあるか、データが続けて受信されたときに影響を受ける場合、その影響もシステムによって異なります。- 戻り値:
- そのチャネル
- 例外:
NotYetConnectedException
- このチャネルがまだ接続されていない場合ClosedChannelException
- このチャネルがクローズしている場合IOException
- その他の入出力エラーが発生した場合
-
shutdownOutput
public abstract AsynchronousSocketChannel shutdownOutput() throws IOException
チャネルを閉じずに書き込むための接続をシャットダウンします。書込み用にシャットダウンしたあとに、さらにそのチャネルに書き込もうとすると、
ClosedChannelException
がスローされます。 接続の出力側がすでにシャットダウンされている場合は、このメソッドを呼び出しても何の効果もありません。 未処理の書込み操作に対する影響はシステムによって異なるため、指定されません。- 戻り値:
- そのチャネル
- 例外:
NotYetConnectedException
- このチャネルがまだ接続されていない場合ClosedChannelException
- このチャネルがクローズしている場合IOException
- その他の入出力エラーが発生した場合
-
getRemoteAddress
public abstract SocketAddress getRemoteAddress() throws IOException
このチャネルのソケットが接続されているリモート・アドレスを返します。チャネルがInternet Protocolソケット・アドレスにバインドおよび接続されている場合は、このメソッドからの戻り値の型は
InetSocketAddress
です。- 戻り値:
- リモート・アドレス。チャネルのソケットが接続されていない場合は
null
- 例外:
ClosedChannelException
- チャネルがクローズしている場合IOException
- 入出力エラーが発生した場合
-
connect
public abstract <A> void connect(SocketAddress remote, A attachment, CompletionHandler<Void,? super A> handler)
このチャネルを接続します。このメソッドは、このチャネルを接続する操作を開始します。
handler
パラメータは、接続が正常に確立されたか接続を確立できないときに呼び出される終了ハンドラです。 接続を確立できない場合、チャネルは閉じられます。このメソッドは、
Socket
クラスとまったく同じセキュリティ・チェックを行います。 つまり、セキュリティ・マネージャがインストールされている場合、このメソッドは、そのcheckConnect
メソッドが指定されたリモート・エンドポイントのアドレスおよびポート番号への接続を許可することを確認します。- 型パラメータ:
A
- 接続のタイプ- パラメータ:
remote
- このチャネルの接続先リモート・アドレスattachment
- 入出力操作に接続されるオブジェクト。null
も可handler
- 結果を消費するためのハンドラ- 例外:
UnresolvedAddressException
- 指定されたリモート・アドレスが完全に解決されない場合UnsupportedAddressTypeException
- 指定されたリモート・アドレスのタイプがサポート対象外の場合AlreadyConnectedException
- このチャネルがすでに接続されている場合ConnectionPendingException
- このチャネルですでに接続操作が実行中である場合ShutdownChannelGroupException
- チャネル・グループが終了している場合SecurityException
- セキュリティ・マネージャがインストールされていて、指定されたリモート・エンドポイントへのアクセスが許可されていない場合- 関連項目:
getRemoteAddress()
-
connect
public abstract Future<Void> connect(SocketAddress remote)
このチャネルを接続します。このメソッドは、このチャネルを接続する操作を開始します。 このメソッドは、
connect(SocketAddress, Object, CompletionHandler)
メソッドとまったく同じように動作します。ただし、終了ハンドラを指定するかわりに、このメソッドは保留状態の結果を表すFuture
を返します。Future
のget
メソッドは、正常に完了するとnull
を返します。- パラメータ:
remote
- このチャネルの接続先リモート・アドレス- 戻り値:
- 保留されている結果を表す
Future
オブジェクト - 例外:
UnresolvedAddressException
- 指定されたリモート・アドレスが完全に解決されない場合UnsupportedAddressTypeException
- 指定されたリモート・アドレスのタイプがサポート対象外の場合AlreadyConnectedException
- このチャネルがすでに接続されている場合ConnectionPendingException
- このチャネルですでに接続操作が実行中である場合SecurityException
- セキュリティ・マネージャがインストールされていて、指定されたリモート・エンドポイントへのアクセスが許可されていない場合
-
read
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)
メソッドとまったく同じように動作します。- 型パラメータ:
A
- 接続のタイプ- パラメータ:
dst
- バイトの転送先バッファtimeout
- 入出力操作が完了するための最大時間unit
-timeout
引数の時間単位attachment
- 入出力操作に接続されるオブジェクト。null
も可handler
- 結果を消費するためのハンドラ- 例外:
IllegalArgumentException
- バッファが読取り専用である場合ReadPendingException
- このチャネルで読取り操作がすでに進行中である場合NotYetConnectedException
- このチャネルがまだ接続されていない場合ShutdownChannelGroupException
- チャネル・グループが終了している場合
-
read
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
- 型パラメータ:
A
- 接続のタイプ- パラメータ:
dst
- バイトの転送先バッファattachment
- 入出力操作に接続されるオブジェクト。null
も可handler
- 終了ハンドラ- 例外:
IllegalArgumentException
- バッファが読取り専用である場合ReadPendingException
- 特定の時点で複数の読取りが未処理になることをチャネルが許可せず、前の読取りが終了していない場合NotYetConnectedException
- このチャネルがまだ接続されていない場合ShutdownChannelGroupException
- チャネル・グループが終了している場合
-
read
public abstract Future<Integer> read(ByteBuffer dst)
インタフェースからコピーされた説明:AsynchronousByteChannel
このチャネルのバイト・シーケンスを指定のバッファに読み込みます。このメソッドは、このチャネルのバイト・シーケンスを指定のバッファに読み取るための非同期読込み操作を開始します。 このメソッドは、
read(ByteBuffer,Object,CompletionHandler)
メソッドとまったく同じように動作します。ただし、終了ハンドラを指定する代わりに、このメソッドは保留状態の結果を表すFuture
を返します。Future
のget
メソッドは、読み取られたバイト数、またチャネルがストリームの終わりに達したためにバイトが読み込めなかった場合は-1
を返します。- 定義:
read
、インタフェースAsynchronousByteChannel
- パラメータ:
dst
- バイトの転送先バッファ- 戻り値:
- 操作の結果を表すFuture
- 例外:
IllegalArgumentException
- バッファが読取り専用である場合ReadPendingException
- 特定の時点で複数の読取りが未処理になることをチャネルが許可せず、前の読取りが終了していない場合NotYetConnectedException
- このチャネルがまだ接続されていない場合
-
read
public abstract <A> void read(ByteBuffer[] dsts, int offset, int length, long timeout, TimeUnit unit, A attachment, CompletionHandler<Long,? super A> handler)
このチャネルのバイト・シーケンスを指定されたバッファのサブシーケンスに読み込みます。 分散読み込みと呼ばれることがあるこの操作は、1つ以上の固定長ヘッダーと、そのあとに可変長の本体で構成されるセグメントにデータをグループ化するネットワーク・プロトコルを実装する際に役に立つことがあります。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
で終了します。 タイム・アウトが発生し、バイトが読み取られていないか、チャネルから指定したバッファに読み取られないことを実装で保証できない場合、チャネルからさらに読み取ろうとすると、詳細不明なランタイム例外がスローされます。- 型パラメータ:
A
- 接続のタイプ- パラメータ:
dsts
- バイトの転送先バッファoffset
- 最初のバイトの転送先となるバッファ配列内のオフセット。dsts.length
以下の負でない値length
- アクセスされる最大バッファ数。dsts.length - offset
以下の負でない値である必要があります。timeout
- 入出力操作が完了するための最大時間unit
-timeout
引数の時間単位attachment
- 入出力操作に接続されるオブジェクト。null
も可handler
- 結果を消費するためのハンドラ- 例外:
IndexOutOfBoundsException
-offset
およびlength
パラメータの事前条件が満たされない場合IllegalArgumentException
- バッファが読取り専用である場合ReadPendingException
- このチャネルで読取り操作がすでに進行中である場合NotYetConnectedException
- このチャネルがまだ接続されていない場合ShutdownChannelGroupException
- チャネル・グループが終了している場合
-
write
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)
メソッドとまったく同じように動作します。- 型パラメータ:
A
- 接続のタイプ- パラメータ:
src
- バイトの取得先バッファtimeout
- 入出力操作が完了するための最大時間unit
-timeout
引数の時間単位attachment
- 入出力操作に接続されるオブジェクト。null
も可handler
- 結果を消費するためのハンドラ- 例外:
WritePendingException
- このチャネルで書込み操作がすでに進行中である場合NotYetConnectedException
- このチャネルがまだ接続されていない場合ShutdownChannelGroupException
- チャネル・グループが終了している場合
-
write
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
- 型パラメータ:
A
- 接続のタイプ- パラメータ:
src
- バイトの取得先バッファattachment
- 入出力操作に接続されるオブジェクト。null
も可handler
- 終了ハンドラ・オブジェクト- 例外:
WritePendingException
- 特定の時点で複数の書込みが未処理になることをチャネルが許可せず、前の書込みが終了していない場合NotYetConnectedException
- このチャネルがまだ接続されていない場合ShutdownChannelGroupException
- チャネル・グループが終了している場合
-
write
public abstract Future<Integer> write(ByteBuffer src)
インタフェースからコピーされた説明:AsynchronousByteChannel
このチャネルのバイト・シーケンスを指定のバッファから書き出します。このメソッドは、バイト・シーケンスを指定のバッファからこのチャネルに書き込むための非同期書込み操作を開始します。 このメソッドは、
write(ByteBuffer,Object,CompletionHandler)
メソッドとまったく同じように動作します。ただし、終了ハンドラを指定する代わりに、このメソッドは保留状態の結果を表すFuture
を返します。Future
のget
メソッドは書き込まれたバイト数を返します。- 定義:
write
、インタフェースAsynchronousByteChannel
- パラメータ:
src
- バイトの取得先バッファ- 戻り値:
- 操作の結果を表すFuture
- 例外:
WritePendingException
- 特定の時点で複数の書込みが未処理になることをチャネルが許可せず、前の書込みが終了していない場合NotYetConnectedException
- このチャネルがまだ接続されていない場合
-
write
public abstract <A> void write(ByteBuffer[] srcs, int offset, int length, long timeout, TimeUnit unit, A attachment, CompletionHandler<Long,? super A> handler)
このチャネルのバイト・シーケンスを指定されたバッファのサブシーケンスから書き出します。 分散書き込みと呼ばれることがあるこの操作は、1つ以上の固定長ヘッダーと、そのあとに可変長の本体で構成されるセグメントにデータをグループ化するネットワーク・プロトコルを実装する際に役に立つことがあります。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
で終了します。 タイム・アウトが発生し、バイトが書き込まれていないか、指定したバッファからチャネルに書き込まれないことを実装で保証できない場合、チャネルにさらに書き込もうとすると、詳細不明なランタイム例外がスローされます。- 型パラメータ:
A
- 接続のタイプ- パラメータ:
srcs
- バイトの取得先バッファoffset
- 最初のバイトの取得先となるバッファ配列内のオフセット。srcs.length
以下の負でない値length
- アクセスされる最大バッファ数。srcs.length - offset
以下の負でない値である必要があります。timeout
- 入出力操作が完了するための最大時間unit
-timeout
引数の時間単位attachment
- 入出力操作に接続されるオブジェクト。null
も可handler
- 結果を消費するためのハンドラ- 例外:
IndexOutOfBoundsException
-offset
およびlength
パラメータの事前条件が満たされない場合WritePendingException
- このチャネルで書込み操作がすでに進行中である場合NotYetConnectedException
- このチャネルがまだ接続されていない場合ShutdownChannelGroupException
- チャネル・グループが終了している場合
-
getLocalAddress
public abstract SocketAddress getLocalAddress() throws IOException
このチャネルのソケットがバインドされているソケット・アドレスを返します。チャネルがInternet Protocolソケット・アドレスに
バインド
されている場合は、このメソッドからの戻り値の型はInetSocketAddress
です。セキュリティ・マネージャが設定されている場合は、セキュリティ・マネージャの
checkConnect
メソッドがローカル・アドレスおよび-1
を引数として呼び出され、操作が許可されるかどうかが確認されます。 この操作が許可されない場合は、ループバック
・アドレスおよびチャネルのソケットのローカル・ポートを表すSocketAddress
が返されます。- 定義:
getLocalAddress
、インタフェースNetworkChannel
- 戻り値:
- ソケットがバインドされている
SocketAddress
、またはセキュリティ・マネージャによって拒否された場合はループバック・アドレスを表すSocketAddress
、またはチャネルのソケットがバインドされていない場合はnull
- 例外:
ClosedChannelException
- チャネルがクローズしている場合IOException
- 入出力エラーが発生した場合
-
-