クラスSocketChannel

すべての実装されたインタフェース:
Closeable, AutoCloseable, ByteChannel, Channel, GatheringByteChannel, InterruptibleChannel, NetworkChannel, ReadableByteChannel, ScatteringByteChannel, WritableByteChannel

public abstract class SocketChannel extends AbstractSelectableChannel implements ByteChannel, ScatteringByteChannel, GatheringByteChannel, NetworkChannel
ストリーム型接続ソケット用の選択可能チャネルです。

ソケット・チャネルは、このクラスのopenメソッドのいずれかを呼び出して作成されます。 no-arg openメソッドは、「インターネット・プロトコル」ソケットのソケット・チャネルを開きます。 open(ProtocolFamily)メソッドは、指定されたプロトコル・ファミリのソケットのソケット・チャネルを開くために使用されます。 任意の既存のソケット用にチャネルを作成することはできません。 新しく作成されたソケット・チャネルはオープンですが、接続は確立されていません。 未接続のチャネルに対して入力操作を呼び出そうとすると、NotYetConnectedExceptionがスローされます。 ソケット・チャネルは、そのconnectメソッドを呼び出すことで接続できます。接続すると、ソケット・チャネルは閉じられるまで接続されたままになります。 ソケット・チャネルが接続されているかどうかは、そのisConnectedメソッドを呼び出して判断できます。

ソケット・チャネルは非ブロック接続をサポートします。ソケット・チャネルの作成とリモート・ソケットへのリンクの確立プロセスはconnectメソッドによって開始され、後でfinishConnectメソッドによって完了します。 接続操作が実行中であるかどうかは、isConnectionPendingメソッドの呼出しによって判断できます。

ソケット・チャネルでは、Channelクラスで指定された非同期クローズ演算と同様の「非同期シャットダウン」がサポートされます。 ソケットの入力側が1つのスレッドによってシャットダウンされ、別のスレッドがソケットのチャネルの読み取り操作でブロックされている場合、ブロックされているスレッドの読み取り操作はバイトを読み取らずに完了し、-1を返します。 一方のスレッドがソケットのチャネルに対する書込み操作の途中でブロックされているのに、もう一方のスレッドがソケットの出力側を停止した場合、ブロックされたスレッドはAsynchronousCloseExceptionを受け取ります。

ソケット・オプションはsetOptionメソッドを使用して構成されます。 「インターネット・プロトコル」ソケットのソケット・チャネルでは、次のオプションがサポートされます:

ソケット・オプション
オプション名 説明
SO_SNDBUF ソケット送信バッファのサイズ
SO_RCVBUF ソケット受信バッファのサイズ
SO_KEEPALIVE 接続をキープアライブにします
SO_REUSEADDR アドレスを再利用します
SO_LINGER 閉じるときにデータが存在する場合は遅延します(ブロック・モードに構成されている場合のみ)
TCP_NODELAY Nagleアルゴリズムを無効にします

「Unixドメイン」ソケットのソケット・チャネルでは、次のものがサポートされます:

ソケット・オプション
オプション名 説明
SO_SNDBUF ソケット送信バッファのサイズ
SO_RCVBUF ソケット受信バッファのサイズ
SO_LINGER 閉じるときにデータが存在する場合は遅延します(ブロック・モードに構成されている場合のみ)

追加(実装固有)のオプションをサポートできる場合もあります。

ソケット・チャネルは、複数の並行スレッドで安全に使用できます。 データグラム・チャネルは並行読取りおよび書込みをサポートします。ただし、読取りを行うスレッドも書込みを行うスレッドも特定の時点では常に1個以下です。 connectメソッドとfinishConnectメソッドは相互に同期しており、いずれかのメソッドの呼出し中に読み込みまたは書込み操作を開始しようとすると、この処理はその呼出しが完了するまでブロックされます。

導入されたバージョン:
1.4
  • コンストラクタのサマリー

    コンストラクタ
    修飾子
    コンストラクタ
    説明
    protected
    このクラスの新しいインスタンスを初期化します。
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    abstract SocketChannel
    チャネルのソケットをローカル・アドレスにバインドします。
    abstract boolean
    このチャネルのソケットを接続します。
    abstract boolean
    ソケット・チャネルの接続処理を完了します。
    abstract SocketAddress
    このチャネルのソケットがバインドされているソケット・アドレスを返します。
    abstract SocketAddress
    このチャネルのソケットが接続されているリモート・アドレスを返します。
    abstract boolean
    このチャネルのネットワーク・ソケットが接続されているかどうかを判断します。
    abstract boolean
    このチャネル上で接続操作が進行中かどうかを判断します。
    「インターネット・プロトコル」ソケットのソケット・チャネルを開きます。
    ソケット・チャネルをオープンします。
    ソケット・チャネルをオープンし、リモート・アドレスに接続します。
    abstract int
    このチャネルのバイト・シーケンスを指定のバッファに読み込みます。
    final long
    read(ByteBuffer[] dsts)
    このチャネルのバイト・シーケンスを指定されたバッファに読み込みます。
    abstract long
    read(ByteBuffer[] dsts, int offset, int length)
    このチャネルのバイト・シーケンスを指定されたバッファのサブシーケンスに読み込みます。
    abstract <T> SocketChannel
    setOption(SocketOption<T> name, T value)
    ソケット・オプションの値を設定します。
    abstract SocketChannel
    チャネルを閉じずに読み込むための接続をシャットダウンします。
    abstract SocketChannel
    チャネルを閉じずに書き込むための接続をシャットダウンします。
    abstract Socket
    このチャネルに関連したソケットを取得します。
    final int
    このチャネルのサポートされている操作を識別する操作セットを返します。
    abstract int
    このチャネルのバイト・シーケンスを指定のバッファから書き出します。
    final long
    write(ByteBuffer[] srcs)
    このチャネルのバイト・シーケンスを指定されたバッファから書き出します。
    abstract long
    write(ByteBuffer[] srcs, int offset, int length)
    このチャネルのバイト・シーケンスを指定されたバッファのサブシーケンスから書き出します。

    クラスで宣言されたメソッド AbstractSelectableChannel

    blockingLock, configureBlocking, implCloseChannel, implCloseSelectableChannel, implConfigureBlocking, isBlocking, isRegistered, keyFor, provider, register
    修飾子と型
    メソッド
    説明
    final Object
    configureBlockingおよびregisterメソッドが同期するオブジェクトを取得します。
    configureBlocking(boolean block)
    このチャネルのブロック・モードを調整します。
    protected final void
    現在のチャネルをクローズします。
    protected abstract void
    この選択可能チャネルをクローズします。
    protected abstract void
    implConfigureBlocking(boolean block)
    このチャネルのブロック・モードを調整します。
    final boolean
    このチャネル上の個々の入出力操作が前の入出力操作が完了するまでブロックされるかどうかを判断します。
    final boolean
    現在このチャネルがセレクタに登録されているかどうかを判断します。
    チャネルが指定されたセレクタに登録されていることを示すキーを取得します。
    このチャネルの作成元プロバイダを返します。
    register(Selector sel, int ops, Object att)
    このチャネルを指定されたセレクタに登録し、選択キーを返します。

    クラスで宣言されたメソッド SelectableChannel

    register
    修飾子と型
    メソッド
    説明
    register(Selector sel, int ops)
    このチャネルを指定されたセレクタに登録し、選択キーを返します。

    クラスで宣言されたメソッド AbstractInterruptibleChannel

    begin, close, end, isOpen
    修飾子と型
    メソッド
    説明
    protected final void
    無期限にブロックされる入出力操作の開始をマークします。
    final void
    現在のチャネルをクローズします。
    protected final void
    end(boolean completed)
    無期限にブロックされる入出力操作の終了をマークします。
    final boolean
    現在のチャネルの状態がオープンであるかどうかを判断します。

    クラスオブジェクトで宣言されたメソッド

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    修飾子と型
    メソッド
    説明
    protected Object
    このオブジェクトのコピーを作成して、返します。
    boolean
    このオブジェクトと他のオブジェクトが等しいかどうかを示します。
    protected void
    削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。
    最終決定は非推奨であり、将来のリリースで削除される可能性があります。
    final Class<?>
    このObjectの実行時クラスを返します。
    int
    このオブジェクトに対するハッシュ・コード値を返します。
    final void
    このオブジェクトのモニターで待機中のスレッドを1つ再開します。
    final void
    このオブジェクトのモニターで待機中のすべてのスレッドを再開します。
    オブジェクトの文字列表現を返します。
    final void
    現在のスレッドが目覚めるまで待機します。通常、notifiedまたはinterruptedです。
    final void
    wait(long timeoutMillis)
    現在のスレッドは、通常、notifiedまたはinterruptedであるか、一定のリアルタイムが経過するまで、目覚めるまで待機します。
    final void
    wait(long timeoutMillis, int nanos)
    現在のスレッドは、通常、notifiedまたはinterruptedであるか、一定のリアルタイムが経過するまで、目覚めるまで待機します。

    インタフェースで宣言されたメソッド NetworkChannel

    getOption, supportedOptions
    修飾子と型
    メソッド
    説明
    <T> T
    ソケット・オプションの値を返します。
    このチャネルがサポートするソケット・オプションのセットを返します。
  • コンストラクタの詳細

    • SocketChannel

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

    • open

      public static SocketChannel open() throws IOException
      「インターネット・プロトコル」ソケットのソケット・チャネルを開きます。

      システム全体のデフォルトSelectorProviderオブジェクトのopenSocketChannelメソッドを呼び出すことで、新しいチャネルが作成されます。

      戻り値:
      新しいソケット・チャネル
      スロー:
      IOException - 入出力エラーが発生した場合
      関連項目:
    • open

      public static SocketChannel open(ProtocolFamily family) throws IOException
      ソケット・チャネルをオープンします。 familyパラメータは、チャネル・ソケットのprotocol familyを指定します。

      新しいチャネルは、システム全体のデフォルトのopenSocketChannel(ProtocolFamily)メソッドを呼び出すことで作成されます。 SelectorProvider object.

      パラメータ:
      family - プロトコル・ファミリ
      戻り値:
      新しいソケット・チャネル
      スロー:
      UnsupportedOperationException - 指定されたプロトコル・ファミリがサポートされていない場合。 たとえば、パラメータにStandardProtocolFamily.INET6が指定されているが、IPv6がプラットフォームで有効になっていないとします。
      IOException - 入出力エラーが発生した場合
      導入されたバージョン:
      15
      関連項目:
    • open

      public static SocketChannel open(SocketAddress remote) throws IOException
      ソケット・チャネルをオープンし、リモート・アドレスに接続します。

      リモート・アドレスがInetSocketAddressの場合、このメソッドは、open()メソッドを呼び出し、結果のソケット・チャネルでconnectメソッドを呼び出し、それをremoteに渡してからそのチャネルを返すかのように動作します。

      リモート・アドレスがUnixDomainSocketAddressの場合、これはStandardProtocolFamily.UNIXをパラメータとして使用してopen(ProtocolFamily)メソッドを呼び出し、結果のソケット・チャネルでconnectメソッドを呼び出してremoteに渡し、そのチャネルを返すことで機能します。

      パラメータ:
      remote - 新しいチャネルの接続先リモート・アドレス
      戻り値:
      新しい、接続されたソケット・チャネル
      スロー:
      AsynchronousCloseException - 接続操作の進行中に、別のスレッドによってこのチャネルがクローズされた場合
      ClosedByInterruptException - 接続操作の進行中に別のスレッドが現在のスレッドを中断した場合、チャネルをクローズし、現在のスレッドの中断ステータスを設定します
      UnresolvedAddressException - 指定されたリモート・アドレスが完全に解決されていないInetSocketAddressである場合
      UnsupportedAddressTypeException - 指定されたリモート・アドレスのタイプがサポート対象外の場合
      IOException - その他の入出力エラーが発生した場合
      関連項目:
    • validOps

      public final int validOps()
      このチャネルのサポートされている操作を識別する操作セットを返します。

      ソケット・チャネルは接続、読取りおよび書込みをサポートしているため、このメソッドは( SelectionKey.OP_CONNECT | SelectionKey.OP_READ | SelectionKey.OP_WRITE)を返します。

      定義:
      validOps、クラスSelectableChannel
      戻り値:
      有効な操作セット
    • bind

      public abstract SocketChannel bind(SocketAddress local) throws IOException
      チャネルのソケットをローカル・アドレスにバインドします。

      このメソッドは、ソケットとローカル・アドレスとの間の関連付けを確立するために使用されます。 「インターネット・プロトコル」ソケットの場合、関連付けが確立されると、ソケットはチャネルがクローズされるまでバインドされたままになります。 localパラメータの値が nullの場合、ソケットは自動的に割り当てられるアドレスにバインドされます。

      定義:
      bind、インタフェースNetworkChannel
      APIのノート:
      ソケット・チャネルを「Unixドメイン」ソケットにバインドすると、UnixDomainSocketAddressのファイル・パスに対応するファイルが作成されます。 このファイルはチャネルがクローズされた後も保持され、別のソケットを同じ名前にバインドする前に削除する必要があります。 Unixドメイン・ソケットへのソケット・チャネルがbindを呼び出さずに接続することによって「暗黙的」バウンドである場合、そのソケットはファイルシステム内に対応するソケット・ファイルのない「名前なし」です。 Unixドメイン・ソケットへのソケット・チャネルが、 bind(null)を呼び出すことによってバインドされた「自動」である場合は、ソケットの名前も付けられません。
      実装上のノート:
      各プラットフォームでは、「Unixドメイン」ソケットの名前に対して実装固有の最大長が適用されます。 この制限は、チャネルがバインドされるときに適用されます。 通常、最大長は100バイト以下です。
      パラメータ:
      local - ソケットのバインド先のアドレス、または自動的に割り当てられるソケット・アドレスにソケットをバインドする場合はnull
      戻り値:
      このチャネル
      スロー:
      ConnectionPendingException - このチャネルですでに非ブロック接続操作が実行中である場合
      AlreadyBoundException - ソケットがすでにバインドされている場合
      UnsupportedAddressTypeException - 指定されたアドレスのタイプがサポート対象外の場合
      ClosedChannelException - チャネルがクローズしている場合
      IOException - その他の入出力エラーが発生した場合
      導入されたバージョン:
      1.7
      関連項目:
    • setOption

      public abstract <T> SocketChannel setOption(SocketOption<T> name, T value) throws IOException
      インタフェースからコピーされた説明: NetworkChannel
      ソケット・オプションの値を設定します。
      定義:
      setOption、インタフェースNetworkChannel
      型パラメータ:
      T - ソケット・オプション値のタイプ
      パラメータ:
      name - ソケット・オプション
      value - ソケット・オプションの値。 一部のソケット・オプションに対しては、nullの値が有効な値である場合があります。
      戻り値:
      このチャネル
      スロー:
      UnsupportedOperationException - チャネルがソケット・オプションをサポートしていない場合
      IllegalArgumentException - 値がこのソケット・オプションに対して有効な値でない場合
      ClosedChannelException - このチャネルがクローズしている場合
      IOException - 入出力エラーが発生した場合
      導入されたバージョン:
      1.7
      関連項目:
    • shutdownInput

      public abstract SocketChannel shutdownInput() throws IOException
      チャネルを閉じずに読み込むための接続をシャットダウンします。

      読取り用にシャットダウンしたあとに、さらにそのチャネルで読取りを行うと、ストリームの終わりを示す-1が返されます。 接続の入力側がすでにシャットダウンされている場合は、このメソッドを呼び出しても何の効果もありません。

      戻り値:
      チャネル
      スロー:
      NotYetConnectedException - このチャネルがまだ接続されていない場合
      ClosedChannelException - このチャネルがクローズしている場合
      IOException - その他の入出力エラーが発生した場合
      導入されたバージョン:
      1.7
    • shutdownOutput

      public abstract SocketChannel shutdownOutput() throws IOException
      チャネルを閉じずに書き込むための接続をシャットダウンします。

      書込み用にシャットダウンしたあとに、さらにそのチャネルに書き込もうとすると、ClosedChannelExceptionがスローされます。 接続の出力側がすでにシャットダウンされている場合は、このメソッドを呼び出しても何の効果もありません。

      戻り値:
      チャネル
      スロー:
      NotYetConnectedException - このチャネルがまだ接続されていない場合
      ClosedChannelException - このチャネルがクローズしている場合
      IOException - その他の入出力エラーが発生した場合
      導入されたバージョン:
      1.7
    • socket

      public abstract Socket socket()
      このチャネルに関連したソケットを取得します。
      戻り値:
      このチャネルに関連したソケット
      スロー:
      UnsupportedOperationException - チャネル・ソケットが「インターネット・プロトコル」ソケットでない場合
    • isConnected

      public abstract boolean isConnected()
      このチャネルのネットワーク・ソケットが接続されているかどうかを判断します。
      戻り値:
      このチャネルのネットワーク・ソケットがopenで接続されている場合のみ、true
    • isConnectionPending

      public abstract boolean isConnectionPending()
      このチャネル上で接続操作が進行中かどうかを判断します。
      戻り値:
      このチャネル上で接続操作が開始されていて、finishConnectメソッドを呼び出すことによってまだ完了していない場合にかぎりtrue
    • connect

      public abstract boolean connect(SocketAddress remote) throws IOException
      このチャネルのソケットを接続します。

      このチャネルが非ブロック・モードの場合、このメソッドの呼出しにより、非ブロック接続操作が開始されます。 ローカル接続の場合のように即座に接続が確立される場合、このメソッドはtrueを返します。 それ以外の場合はfalseを返し、あとでfinishConnectメソッドを呼び出すことにより、接続操作を完了する必要があります。

      このチャネルがブロック・モードの場合、このメソッドの呼出しは、接続が確立されるか入出力エラーが発生するまでブロックされます。

      このメソッドはいつでも呼び出すことができます。 このメソッドを呼び出している途中でこのチャネルに対する読み取りまたは書込み操作を呼び出した場合、最初の呼出しが完了するまで次の呼出しはブロックされます。 接続しようとしたが失敗した場合、つまりこのメソッドの呼出しがチェック例外をスローする場合、チャネルはクローズされます。

      パラメータ:
      remote - このチャネルの接続先リモート・アドレス
      戻り値:
      接続が確立された場合はtrue、このチャネルが非ブロック・モードで接続操作の実行中である場合はfalse
      スロー:
      AlreadyConnectedException - このチャネルがすでに接続されている場合
      ConnectionPendingException - このチャネルですでに非ブロック接続操作が実行中である場合
      ClosedChannelException - このチャネルがクローズしている場合
      AsynchronousCloseException - 接続操作の進行中に、別のスレッドによってこのチャネルがクローズされた場合
      ClosedByInterruptException - 接続操作の進行中に別のスレッドが現在のスレッドを中断した場合、チャネルをクローズし、現在のスレッドの中断ステータスを設定します
      UnresolvedAddressException - 指定されたリモート・アドレスが完全に解決されていないInetSocketAddressである場合
      UnsupportedAddressTypeException - 指定されたリモート・アドレスのタイプがサポート対象外の場合
      IOException - その他の入出力エラーが発生した場合
    • finishConnect

      public abstract boolean finishConnect() throws IOException
      ソケット・チャネルの接続処理を完了します。

      ソケット・チャネルを非ブロック・モードにし、そのconnectメソッドを呼び出すと、非ブロック接続操作が開始されます。 接続が確立されるか、接続に失敗したあと、ソケット・チャネルは接続可能な状態になります。ここで、接続シーケンスを完了するために、このメソッドが呼び出されます。 接続操作に失敗した場合、このメソッドを呼び出すと適切なIOExceptionがスローされます。

      このチャネルがすでに接続されている場合、このメソッドはブロックされず、すぐにtrueを返します。 このチャネルが非ブロッキング・モードの場合、接続プロセスが完了していないと、このメソッドはfalseを返します。 このチャネルがブロッキング・モードの場合、このメソッドは、接続が完了するか失敗するまでブロックし、常にtrueを返すか、失敗を説明するチェック済の例外をスローします。

      このメソッドはいつでも呼び出すことができます。 このメソッドを呼び出している途中でこのチャネルに対する読み取りまたは書込み操作を呼び出した場合、最初の呼出しが完了するまで次の呼出しはブロックされます。 接続しようとしたが失敗した場合、つまりこのメソッドの呼出しがチェック例外をスローする場合、チャネルはクローズされます。

      戻り値:
      このチャネルのソケットが接続されている場合にかぎりtrue
      スロー:
      NoConnectionPendingException - このチャネルが接続されておらず、接続操作も開始されていない場合
      ClosedChannelException - このチャネルがクローズしている場合
      AsynchronousCloseException - 接続操作の進行中に、別のスレッドによってこのチャネルがクローズされた場合
      ClosedByInterruptException - 接続操作の進行中に別のスレッドが現在のスレッドを中断した場合、チャネルをクローズし、現在のスレッドの中断ステータスを設定します
      IOException - その他の入出力エラーが発生した場合
    • getRemoteAddress

      public abstract SocketAddress getRemoteAddress() throws IOException
      このチャネルのソケットが接続されているリモート・アドレスを返します。

      チャネル・ソケットがバインドされ、「インターネット・プロトコル」ソケット・アドレスに接続されている場合、戻り値のタイプはInetSocketAddressです。

      チャネル・ソケットがバインドされ、「Unixドメイン」ソケット・アドレスに接続されている場合、返されるアドレスはUnixDomainSocketAddressです。

      戻り値:
      リモート・アドレス。チャネルのソケットが接続されていない場合はnull
      スロー:
      ClosedChannelException - チャネルがクローズしている場合
      IOException - 入出力エラーが発生した場合
      導入されたバージョン:
      1.7
    • read

      public abstract int read(ByteBuffer dst) throws IOException
      次のインタフェースからコピーされた説明: ReadableByteChannel
      このチャネルのバイト・シーケンスを指定のバッファに読み込みます。

      チャネルから最大rバイトの読取りが試行されます。rは、このメソッドが起動された時点でバッファに残っているバイト数(dst.remaining())です。

      長さnのバイト・シーケンスが読み取られているとします。ここで、0 <= n <= rです。 このバイト・シーケンスは、シーケンス内の最初のバイトが索引pにあり、最後のバイトが索引p + n - 1にあるようにバッファに転送されます。ここで、pは、このメソッドが起動された時点でのバッファの位置です。 戻ると、バッファの位置はp + nと等しくなります。この制限は変更されません。

      読込み操作によってバッファがいっぱいになるとはかぎりません。バイトが一切読み取られない場合もあります。 バッファがいっぱいになるかどうかは、チャネルの本来の性質と状態によって決定します。 たとえば非ブロック・モードのソケットは、ソケットの入力バッファからただちに取得できるバイト以外を読み取ることができません。同様に、ファイル・チャネルは、ファイル内のバイト以外を読み取ることができません。 ただし、チャネルがブロック・モードであり、バッファ内のバイト数が1バイト以上の場合、1バイト以上が読み取られるまでこのメソッドはブロックされることになっています。

      このメソッドはいつでも呼び出すことができます。 ただし、ほかのスレッドがこのチャネルに対して読込み操作を開始している場合、このメソッドの呼出しは最初の操作が終わるまでブロックされます。

      定義:
      read、インタフェースReadableByteChannel
      パラメータ:
      dst - バイトの転送先バッファ
      戻り値:
      読み取られたバイト数。ゼロの場合もあれば、チャネルがストリームの最後に達した場合は-1
      スロー:
      NotYetConnectedException - このチャネルがまだ接続されていない場合
      ClosedChannelException - このチャネルがクローズしている場合
      AsynchronousCloseException - 読取り操作の進行中に、別のスレッドによってこのチャネルがクローズされた場合
      ClosedByInterruptException - 読取り操作の進行中に別のスレッドが現在のスレッドを中断した場合、チャネルをクローズし、現在のスレッドの中断ステータスを設定します
      IOException - その他の入出力エラーが発生した場合
    • read

      public abstract long read(ByteBuffer[] dsts, int offset, int length) throws IOException
      次のインタフェースからコピーされた説明: ScatteringByteChannel
      このチャネルのバイト・シーケンスを指定されたバッファのサブシーケンスに読み込みます。

      このメソッドの呼出しは、このチャネルから最大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]に転送され、バイト・シーケンス全体が指定されたバッファに転送されるまで、以下同様に転送されます。 各バッファには最大限のバイトが転送されるため、最終更新バッファを除く個々の更新バッファの最終的な位置は、このバッファのリミットと等しくなります。

      このメソッドはいつでも呼び出すことができます。 ただし、ほかのスレッドがこのチャネルに対して読込み操作を開始している場合、このメソッドの呼出しは最初の操作が終わるまでブロックされます。

      定義:
      read、インタフェースScatteringByteChannel
      パラメータ:
      dsts - バイトの転送先バッファ
      offset - 最初のバイトの転送先となるバッファ配列内のオフセット。dsts.length以下の負でない値
      length - アクセスするバッファの最大数。負以外で、dsts.length以下である必要があります - offset
      戻り値:
      読み取られたバイト数。ゼロの場合もあれば、チャネルがストリームの最後に達した場合は-1
      スロー:
      NotYetConnectedException - このチャネルがまだ接続されていない場合
      ClosedChannelException - このチャネルがクローズしている場合
      AsynchronousCloseException - 読取り操作の進行中に、別のスレッドによってこのチャネルがクローズされた場合
      ClosedByInterruptException - 読取り操作の進行中に別のスレッドが現在のスレッドを中断した場合、チャネルをクローズし、現在のスレッドの中断ステータスを設定します
      IOException - その他の入出力エラーが発生した場合
    • read

      public final long read(ByteBuffer[] dsts) throws IOException
      次のインタフェースからコピーされた説明: ScatteringByteChannel
      このチャネルのバイト・シーケンスを指定されたバッファに読み込みます。

      c.read(dsts)形式のこのメソッドの起動は、起動とまったく同じように動作

          c.read(dsts, 0, dsts.length);
      

      定義:
      read、インタフェースScatteringByteChannel
      パラメータ:
      dsts - バイトの転送先バッファ
      戻り値:
      読み取られたバイト数。ゼロの場合もあれば、チャネルがストリームの最後に達した場合は-1
      スロー:
      NotYetConnectedException - このチャネルがまだ接続されていない場合
      ClosedChannelException - このチャネルがクローズしている場合
      AsynchronousCloseException - 読取り操作の進行中に、別のスレッドによってこのチャネルがクローズされた場合
      ClosedByInterruptException - 読取り操作の進行中に別のスレッドが現在のスレッドを中断した場合、チャネルをクローズし、現在のスレッドの中断ステータスを設定します
      IOException - その他の入出力エラーが発生した場合
    • write

      public abstract int write(ByteBuffer src) throws IOException
      次のインタフェースからコピーされた説明: WritableByteChannel
      このチャネルのバイト・シーケンスを指定のバッファから書き出します。

      チャネルに最大rバイトの書込みが試行されます。rは、このメソッドが起動された時点でバッファに残っているバイト数(つまり、src.remaining())です。

      長さnのバイト・シーケンスが書き込まれるとします。ここで、0 <= n <= rです。 このバイト・シーケンスは、索引pから始まるバッファから転送されます。ここで、pは、このメソッドが起動された時点でのバッファの位置です。最後に書き込まれたバイトのインデックスは、p + n - 1になります。 戻ると、バッファの位置はp + nと等しくなります。この制限は変更されません。

      多くのタイプのチャネルでは、rリクエストされたすべてのバイトを書き込んだあとでのみ、書き込み操作が戻されます。 チャネルの種類によっては、その状態に応じて、一部のバイトしか書き込まれない場合や、まったく書込みが行われない場合もあります。 たとえば、非ブロッキング・モードのソケット・チャネルでは、ソケットの出力バッファに空きバイト数を超える書込みはできません。 残りのバイトがすべて書き込まれることを確認するために、書き込みメソッドを複数回呼び出す必要がある場合があります。

      このメソッドはいつでも呼び出すことができます。 ただし、ほかのスレッドがこのチャネルに対して書込み操作を開始している場合、このメソッドの呼出しは最初の操作が終わるまでブロックされます。

      定義:
      write、インタフェースWritableByteChannel
      パラメータ:
      src - バイトの取得先バッファ
      戻り値:
      書き込まれるバイト数。ゼロの場合もある
      スロー:
      NotYetConnectedException - このチャネルがまだ接続されていない場合
      ClosedChannelException - このチャネルがクローズしている場合
      AsynchronousCloseException - 書込み操作の進行中に別のスレッドによってこのチャネルがクローズされた場合
      ClosedByInterruptException - 書込み操作の進行中に別のスレッドが現在のスレッドを中断した場合、チャネルをクローズし、現在のスレッドの中断ステータスを設定します
      IOException - その他の入出力エラーが発生した場合
    • write

      public abstract long write(ByteBuffer[] srcs, int offset, int length) throws IOException
      次のインタフェースからコピーされた説明: GatheringByteChannel
      このチャネルのバイト・シーケンスを指定されたバッファのサブシーケンスから書き出します。

      このチャネルに最大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]から書き込まれ、さらにバイト・シーケンス全体が書き込まれるまで書き込まれます。 各バッファから最大限のバイト数が書き込まれるため、更新された個々のバッファの最終的な位置は、最終更新バッファを除いて、このバッファのリミットと等しくなります。

      多くのタイプのチャネルでは、rリクエストされたすべてのバイトを書き込んだあとでのみ、書き込み操作が戻されます。 チャネルの種類によっては、その状態に応じて、一部のバイトしか書き込まれない場合や、まったく書込みが行われない場合もあります。 たとえば、非ブロッキング・モードのソケット・チャネルでは、ソケットの出力バッファに空きバイト数を超える書込みはできません。 残りのバイトがすべて書き込まれることを確認するために、書き込みメソッドを複数回呼び出す必要がある場合があります。

      このメソッドはいつでも呼び出すことができます。 ただし、ほかのスレッドがこのチャネルに対して書込み操作を開始している場合、このメソッドの呼出しは最初の操作が終わるまでブロックされます。

      定義:
      write、インタフェースGatheringByteChannel
      パラメータ:
      srcs - バイトの取得先バッファ
      offset - 最初のバイトの取得先となるバッファ配列内のオフセット。srcs.length以下の負でない値
      length - アクセスするバッファの最大数。負以外で、srcs.length以下である必要があります - offset
      戻り値:
      書き込まれるバイト数。ゼロの場合もある
      スロー:
      NotYetConnectedException - このチャネルがまだ接続されていない場合
      ClosedChannelException - このチャネルがクローズしている場合
      AsynchronousCloseException - 書込み操作の進行中に別のスレッドによってこのチャネルがクローズされた場合
      ClosedByInterruptException - 書込み操作の進行中に別のスレッドが現在のスレッドを中断した場合、チャネルをクローズし、現在のスレッドの中断ステータスを設定します
      IOException - その他の入出力エラーが発生した場合
    • write

      public final long write(ByteBuffer[] srcs) throws IOException
      次のインタフェースからコピーされた説明: GatheringByteChannel
      このチャネルのバイト・シーケンスを指定されたバッファから書き出します。

      c.write(srcs)形式のこのメソッドの起動は、起動とまったく同じように動作

          c.write(srcs, 0, srcs.length);
      

      定義:
      write、インタフェースGatheringByteChannel
      パラメータ:
      srcs - バイトの取得先バッファ
      戻り値:
      書き込まれるバイト数。ゼロの場合もある
      スロー:
      NotYetConnectedException - このチャネルがまだ接続されていない場合
      ClosedChannelException - このチャネルがクローズしている場合
      AsynchronousCloseException - 書込み操作の進行中に別のスレッドによってこのチャネルがクローズされた場合
      ClosedByInterruptException - 書込み操作の進行中に別のスレッドが現在のスレッドを中断した場合、チャネルをクローズし、現在のスレッドの中断ステータスを設定します
      IOException - その他の入出力エラーが発生した場合
    • getLocalAddress

      public abstract SocketAddress getLocalAddress() throws IOException
      このチャネルのソケットがバインドされているソケット・アドレスを返します。

      チャネルがInternet Protocolソケット・アドレスにバインドされている場合は、このメソッドからの戻り値の型はInetSocketAddressです。

      チャネルがUnixドメイン・ソケット・アドレスにバインドされている場合、ソケット・アドレスはUnixDomainSocketAddressです。

      定義:
      getLocalAddress、インタフェースNetworkChannel
      戻り値:
      ソケットがバインドされているSocketAddress。チャネルのソケットがバインドされていない場合はnull
      スロー:
      ClosedChannelException - チャネルがクローズしている場合
      IOException - 入出力エラーが発生した場合