モジュール java.base
パッケージ 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
    • コンストラクタの詳細

      • AsynchronousSocketChannel

        protected AsynchronousSocketChannel​(AsynchronousChannelProvider provider)
        このクラスの新しいインスタンスを初期化します。
        パラメータ:
        provider - このチャネルの作成元プロバイダ
    • メソッドの詳細

      • provider

        public final AsynchronousChannelProvider provider()
        このチャネルの作成元プロバイダを返します。
        戻り値:
        このチャネルの作成元プロバイダ
      • open

        public static AsynchronousSocketChannel open​(AsynchronousChannelGroup group)
                                              throws IOException
        非同期のソケット・チャネルを開きます。

        グループを作成したAsynchronousChannelProvideropenAsynchronousSocketChannelメソッドを呼び出すことで、新しいチャネルが作成されます。 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を返します。 Futuregetメソッドは、正常に完了すると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を返します。 Futuregetメソッドは、読み取られたバイト数、またチャネルがストリームの終わりに達したためにバイトが読み込めなかった場合は-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を返します。 Futuregetメソッドは書き込まれたバイト数を返します。

        定義:
        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 - 入出力エラーが発生した場合