モジュール java.base
パッケージ java.nio.channels

クラスSocketChannel

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

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

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

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

ソケット・チャネルでは、Channelクラスで指定された非同期クローズ演算と同様の「非同期シャットダウン」がサポートされます。 一方のスレッドがソケットのチャネルに対する読込み操作の途中でブロックされているのに、もう一方のスレッドがソケットの入力側を停止した場合、ブロックされたスレッドの読込み操作は、バイトを一切読み取ることなく終了し、-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
  • コンストラクタの詳細

    • 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 - 指定されたリモート・アドレスのタイプがサポート対象外の場合
      SecurityException - セキュリティ・マネージャがインストールされていて、指定されたリモート・エンドポイントへのアクセスが許可されていない場合
      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 - その他の入出力エラーが発生した場合
      SecurityException - セキュリティ・マネージャがインストールされていて、そのcheckListenメソッドが「インターネット・プロトコル」ソケット・アドレス、またはNetPermission("accessUnixDomainSocket")を拒否する場合は「Unixドメイン」ソケット・アドレスの演算を拒否する場合。
      導入されたバージョン:
      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()
      このチャネルのネットワーク・ソケットが接続されているかどうかを判断します。
      戻り値:
      このチャネルのネットワーク・ソケットがオープンで接続されている場合にかぎりtrue
    • isConnectionPending

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

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

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

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

      「インターネット・プロトコル」ソケットへのチャネルの場合、このメソッドはSocketクラスとまったく同じセキュリティ・チェックを実行します。 つまり、セキュリティ・マネージャがインストールされている場合、このメソッドは、そのcheckConnectメソッドが指定されたリモート・エンドポイントのアドレスおよびポート番号への接続を許可することを確認します。

      「Unixドメイン」ソケットへのチャネルの場合、このメソッドはセキュリティ・マネージャのcheckPermissionメソッドを使用してNetPermission ("accessUnixDomainSocket")をチェックします。

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

      パラメータ:
      remote - このチャネルの接続先リモート・アドレス
      戻り値:
      接続が確立された場合はtrue、このチャネルが非ブロック・モードで接続操作の実行中である場合はfalse
      例外:
      AlreadyConnectedException - このチャネルがすでに接続されている場合
      ConnectionPendingException - このチャネルですでに非ブロック接続操作が実行中である場合
      ClosedChannelException - このチャネルがクローズしている場合
      AsynchronousCloseException - 接続操作の進行中に、別のスレッドによってこのチャネルがクローズされた場合
      ClosedByInterruptException - 接続操作の進行中に別のスレッドからの割込みがあったためにチャネルがクローズし、現在のスレッドの割込みステータスが設定された場合
      UnresolvedAddressException - 指定されたリモート・アドレスが完全に解決されていないInetSocketAddressである場合
      UnsupportedAddressTypeException - 指定されたリモート・アドレスのタイプがサポート対象外の場合
      SecurityException - セキュリティ・マネージャがインストールされていて、指定されたリモート・エンドポイントへのアクセスが許可されていない場合
      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です。 セキュリティ・マネージャが設定されている場合は、セキュリティ・マネージャのcheckConnectメソッドがローカル・アドレスおよび-1を引数として呼び出され、操作が許可されるかどうかが確認されます。 この操作が許可されない場合は、ループバック・アドレスおよびチャネルのソケットのローカル・ポートを表すSocketAddressが返されます。

      チャネルがUnixドメイン・ソケット・アドレスにバインドされている場合、ソケット・アドレスはUnixDomainSocketAddressです。 セキュリティ・マネージャが設定されている場合は、そのcheckPermissionメソッドがNetPermission ("accessUnixDomainSocket")でコールされます。 演算が許可されていない場合は、名前のないUnixDomainSocketAddressが返されます。

      定義:
      getLocalAddress、インタフェース: NetworkChannel
      戻り値:
      ソケットがバインドされているSocketAddress、ループバック・アドレスを表すSocketAddress、セキュリティ・マネージャによって拒否された場合は空のパス、またはチャネル・ソケットがバインドされていない場合はnull
      例外:
      ClosedChannelException - チャネルがクローズしている場合
      IOException - 入出力エラーが発生した場合