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

クラスDatagramChannel

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

public abstract class DatagramChannel
extends AbstractSelectableChannel
implements ByteChannel, ScatteringByteChannel, GatheringByteChannel, MulticastChannel
データグラム型ソケットの選択可能なチャネルです。

データグラム・チャネルは、このクラスのopenメソッドの1つを呼び出すことによって作成されます。 任意の既存のデータグラム・ソケットのチャネルを作成することはできません。 新しく作成されたデータグラム・チャネルはオープンですが、接続は確立されていません。 sendメソッドとreceiveメソッドを使用するために、データグラム・チャネルを接続する必要はありません。 セキュリティ・チェックのオーバーヘッドを回避する目的でconnectメソッドを呼び出すと、データグラム・チャネルが接続され、送受信操作のたびにセキュリティ・チェックが行われずに済みます。 ソケット・アドレスを受け付けない(返さない) readメソッドとwriteメソッドを使用するためには、データグラム・チャネルを接続する必要があります。

一度接続されたデータグラム・チャネルは、接続が切断されるかクローズされるまで接続されたままになります。 データグラム・チャネルが接続されているかどうかは、isConnectedメソッドの呼出しによって判断できます。

ソケット・オプションはsetOptionメソッドを使用して構成されます。 Internet Protocolソケットへのデータグラム・チャネルでは次のオプションがサポートされます。

ソケット・オプション
オプション名 説明
SO_SNDBUF ソケット送信バッファのサイズ
SO_RCVBUF ソケット受信バッファのサイズ
SO_REUSEADDR アドレスを再利用します
SO_BROADCAST ブロードキャスト・データグラムの転送を許可します
IP_TOS IP (Internet Protocol)ヘッダーのサービス・タイプ(ToS)オクテット
IP_MULTICAST_IF IP (Internet Protocol)マルチキャスト・データグラムのネットワーク・インタフェース
IP_MULTICAST_TTL IP (Internet Protocol)マルチキャスト・データグラムの有効期間
IP_MULTICAST_LOOP IP (Internet Protocol)マルチキャスト・データグラムのループ・バック
追加(実装固有)のオプションをサポートできる場合もあります。

データグラム・チャネルは、複数の並行スレッドで安全に使用できます。 データグラム・チャネルは並行読取りおよび書込みをサポートします。ただし、読取りを行うスレッドも書込みを行うスレッドも特定の時点では常に1個以下です。

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

    • DatagramChannel

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

    • open

      public static DatagramChannel open() throws IOException
      データグラム・チャネルをオープンします。

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

      チャネルのソケットのProtocolFamilyは、プラットフォーム(および場合によっては構成)によって異なるため、未指定です。 openを使用して、データグラム・チャネルを開くときにプロトコル・ファミリを選択できます。Internet Protocolマルチキャストを対象とするデータグラム・チャネルを開くときは、これを使用する必要があります。

      戻り値:
      新しいデータグラム・チャネル
      例外:
      IOException - 入出力エラーが発生した場合
    • open

      public static DatagramChannel open​(ProtocolFamily family) throws IOException
      データグラム・チャネルをオープンします。

      familyパラメータは、ProtocolFamilyを指定するために使用されます。 IPマルチキャストにデータグラム・チャネルを使用する場合、これは、このチャネルが参加するマルチキャスト・グループのアドレス・タイプに対応する必要があります。

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

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

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

      データグラム・チャネルでは、読取りと書込みがサポートされるため、このメソッドは(SelectionKey.OP_READ | SelectionKey.OP_WRITE)を返します。

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

      public abstract DatagramChannel bind​(SocketAddress local) throws IOException
      インタフェースからコピーされた説明: NetworkChannel
      チャネルのソケットをローカル・アドレスにバインドします。

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

      定義:
      bind、インタフェース: NetworkChannel
      パラメータ:
      local - ソケットのバインド先のアドレス、または自動的に割り当てられるソケット・アドレスにソケットをバインドする場合はnull
      戻り値:
      このチャネル
      例外:
      AlreadyBoundException - ソケットがすでにバインドされている場合
      UnsupportedAddressTypeException - 指定されたアドレスのタイプがサポート対象外の場合
      ClosedChannelException - チャネルがクローズしている場合
      IOException - その他の入出力エラーが発生した場合
      SecurityException - セキュリティ・マネージャがインストールされていて、checkListenメソッドが操作を拒否した場合
      導入されたバージョン:
      1.7
      関連項目:
      NetworkChannel.getLocalAddress()
    • setOption

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

      public abstract DatagramSocket socket()
      このチャネルに関連したデータグラム・ソケットを取得します。
      戻り値:
      このチャネルに関連したデータグラム・ソケット
    • isConnected

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

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

      チャネルのソケットは、指定されたリモート「ピア」アドレス以外とはデータグラムをやりとりしないように構成されています。 接続後、指定されたアドレス以外のアドレスとデータグラムがやりとりされることはありません。 このメソッドを呼び出す前にreceivedではなかったチャネル「ソケット受信バッファ」のデータグラムは破棄される可能性があります。 チャネル・ソケットは、明示的に切断されるか、閉じられるまで接続されたままになります。

      このメソッドは、DatagramSocketクラスのconnectメソッドとまったく同じセキュリティ・チェックを行います。 セキュリティ・マネージャがインストールされている場合、このメソッドは、checkAcceptメソッドが指定されたリモート・アドレスからのデータグラムの受信を許可し、checkConnectメソッドが指定されたリモート・アドレスへのデータグラムの送信を許可することを検証します。 接続されると、指定されたリモート・アドレスから受信、またはそのアドレスに送信されたデータグラムに対して、それ以上のセキュリティ・チェックは実行されません。 接続先のデータグラム・チャネルが信頼できないコードと共有されないように注意する必要があります。

      このメソッドはいつでも呼び出すことができます。 別のスレッドがこのチャネルで読取りまたは書込み操作をすでに開始している場合、このメソッドの呼出しはこのような操作が完了するまでブロックされます。 このチャネルのソケットがバインドされていない場合は、このメソッドはbindメソッドをnullのパラメータで呼び出した場合と同様に、最初にソケットを自動的に割り当てられるアドレスにバインドします。

      パラメータ:
      remote - このチャネルの接続先リモート・アドレス
      戻り値:
      このデータグラム・チャネル
      例外:
      AlreadyConnectedException - このチャネルがすでに接続されている場合
      ClosedChannelException - このチャネルがクローズしている場合
      AsynchronousCloseException - 接続操作の進行中に、別のスレッドによってこのチャネルがクローズされた場合
      ClosedByInterruptException - 接続操作の進行中に別のスレッドからの割込みがあったためにチャネルがクローズし、現在のスレッドの割込みステータスが設定された場合
      UnresolvedAddressException - 指定されたリモート・アドレスが完全に解決されない場合
      UnsupportedAddressTypeException - 指定されたリモート・アドレスのタイプがサポート対象外の場合
      SecurityException - セキュリティ・マネージャがインストールされており、指定されたリモート・アドレスへのアクセスを許可されていない場合、またはバインドされていない場合、セキュリティ・マネージャcheckListenメソッドは操作を拒否
      IOException - その他の入出力エラーが発生した場合
    • disconnect

      public abstract DatagramChannel disconnect() throws IOException
      このチャネルのソケットの接続を切断します。

      チャネルのソケットは、インストールされているセキュリティ・マネージャから許可された場合にかぎり、あらゆるリモート・アドレスとデータグラムをやりとりできます。

      このメソッドはいつでも呼び出すことができます。 別のスレッドがこのチャネルで読取りまたは書込み操作をすでに開始している場合、このメソッドの呼出しはこのような操作が完了するまでブロックされます。

      このチャネルのソケットが接続されていない場合、またはチャネルがクローズしている場合、このメソッドを呼び出しても何の効果もありません。

      APIのノート:
      このメソッドがIOExceptionをスローする場合、チャネル・ソケットは未指定の状態のままになります。 切断の失敗時にチャネルをクローズすることを強くお薦めします。
      戻り値:
      このデータグラム・チャネル
      例外:
      IOException - その他の入出力エラーが発生した場合
    • getRemoteAddress

      public abstract SocketAddress getRemoteAddress() throws IOException
      このチャネルのソケットが接続されているリモート・アドレスを返します。
      戻り値:
      リモート・アドレス。チャネルのソケットが接続されていない場合はnull
      例外:
      ClosedChannelException - チャネルがクローズしている場合
      IOException - 入出力エラーが発生した場合
      導入されたバージョン:
      1.7
    • receive

      public abstract SocketAddress receive​(ByteBuffer dst) throws IOException
      このチャネルからデータグラムを受信します。

      データグラムをただちに使用できる場合(このチャネルがブロック・モードで動作していてデータグラム1個を使用できる場合)は、データグラムが指定されたbyteバッファにコピーされたあと、ソース・アドレスが返されます。 このチャネルが非ブロック・モードで動作していてデータグラムをすぐに使用できない場合は、ただちにnullが返されます。

      データグラムは、通常のread操作の場合と同様に、指定されたbyteバッファの現在位置に転送されます。 バッファ内に残っているバイト数がデータグラムの格納に必要なバイト数より少ない場合、収まりきらなかったデータグラムは通知なしで破棄されます。

      このメソッドは、DatagramSocketクラスのreceiveメソッドとまったく同じセキュリティ・チェックを行います。 ソケットが特定のリモート・アドレスに接続されておらず、セキュリティ・マネージャがインストールされている場合、このメソッドは、受信されたデータグラムごとにソースのアドレスとポート番号がセキュリティ・マネージャのcheckAcceptメソッドによって許可されていることを検証します。 セキュリティ・マネージャによって許可されないデータグラムは無視されて破棄されます。 このセキュリティ・チェックのオーバーヘッドを回避するには、最初にconnectメソッドを使ってソケットを接続します。

      このメソッドはいつでも呼び出すことができます。 ただし、ほかのスレッドがこのチャネルに対して読込み操作を開始している場合、このメソッドの呼出しは最初の操作が終わるまでブロックされます。 このチャネルのソケットがバインドされていない場合は、このメソッドはbindメソッドをnullのパラメータで呼び出した場合と同様に、最初にソケットを自動的に割り当てられるアドレスにバインドします。

      パラメータ:
      dst - データグラムの転送先バッファ
      戻り値:
      データグラムのソース・アドレス。または、このチャネルが非ブロック・モードで動作していて、すぐに使用できるデータグラムがない場合はnull
      例外:
      IllegalArgumentException - バッファが読取り専用である場合
      ClosedChannelException - このチャネルがクローズしている場合
      AsynchronousCloseException - 読取り操作の進行中に、別のスレッドによってこのチャネルがクローズされた場合
      ClosedByInterruptException - 読取り操作の進行中に、別のスレッドからの割込みがあったためにチャネルがクローズし、現在のスレッドの割込みステータスが設定された場合
      SecurityException - バインドされていない状態でセキュリティ・マネージャがインストールされており、そのcheckListenメソッドは操作を拒否
      IOException - その他の入出力エラーが発生した場合
    • send

      public abstract int send​(ByteBuffer src, SocketAddress target) throws IOException
      このチャネルからデータグラムを送信します。

      チャネルの動作モードが非ブロック・モードで基準となる出力バッファの容量が十分でない場合や、動作モードがブロック・モードで十分な容量がある場合、指定されたバッファ内に残っているバイトは単一のデータグラムとして指定されたターゲット・アドレスへ転送されます。

      データグラムは、通常のwrite操作を実行した場合と同様に、byteバッファから転送されます。

      このメソッドは、DatagramSocketクラスのsendメソッドとまったく同じセキュリティ・チェックを行います。 ソケットが特定のリモート・アドレスに接続されておらず、セキュリティ・マネージャがインストールされている場合、このメソッドは、送信されたデータグラムごとにターゲットのアドレスとポート番号がセキュリティ・マネージャのcheckConnectメソッドによって許可されていることを検証します。 このセキュリティ・チェックのオーバーヘッドを回避するには、最初にconnectメソッドを使ってソケットを接続します。

      このメソッドはいつでも呼び出すことができます。 ただし、ほかのスレッドがこのチャネルに対して書込み操作を開始している場合、このメソッドの呼出しは最初の操作が終わるまでブロックされます。 このチャネルのソケットがバインドされていない場合は、このメソッドはbindメソッドをnullのパラメータで呼び出した場合と同様に、最初にソケットを自動的に割り当てられるアドレスにバインドします。

      パラメータ:
      src - 送信されるデータグラムを含むバッファ
      target - データグラムの送信先アドレス
      戻り値:
      送信バイト数。このメソッドを呼び出したときにソース・バッファ内に残っていたバイト数。このチャネルが非ブロック・モードで動作しており、基準となる出力バッファの容量が不十分なためデータグラムが収まりきらない場合はゼロ
      例外:
      AlreadyConnectedException - このチャネルがtargetで指定されたものとは異なるアドレスに接続されている場合
      ClosedChannelException - このチャネルがクローズしている場合
      AsynchronousCloseException - 読取り操作の進行中に、別のスレッドによってこのチャネルがクローズされた場合
      ClosedByInterruptException - 読取り操作の進行中に、別のスレッドからの割込みがあったためにチャネルがクローズし、現在のスレッドの割込みステータスが設定された場合
      UnresolvedAddressException - 指定されたリモート・アドレスが完全に解決されない場合
      UnsupportedAddressTypeException - 指定されたリモート・アドレスのタイプがサポート対象外の場合
      SecurityException - セキュリティ・マネージャがインストールされており、指定されたアドレスへのデータグラム送信を許可されていない場合、またはバインドされていない場合、セキュリティ・マネージャcheckListenメソッドは操作を拒否
      IOException - その他の入出力エラーが発生した場合
    • read

      public abstract int read​(ByteBuffer dst) throws IOException
      このチャネルからデータグラムを読み込みます。

      このメソッドは、このチャネルのソケットが接続されている場合に限り呼び出すことができ、そのソケットのピアからのデータグラムのみを受け付けます。 指定されたバッファ内に残っているバイト数よりデータグラムのバイト数のほうが多い場合、収まりきらなかったバイトは通知なく破棄されます。 それ以外の場合は、このメソッドはReadableByteChannelインタフェースの指定どおりに動作します。

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

      public abstract long read​(ByteBuffer[] dsts, int offset, int length) throws IOException
      このチャネルからデータグラムを読み込みます。

      このメソッドは、このチャネルのソケットが接続されている場合に限り呼び出すことができ、そのソケットのピアからのデータグラムのみを受け付けます。 指定されたバッファ内に残っているバイト数よりデータグラムのバイト数のほうが多い場合、収まりきらなかったバイトは通知なく破棄されます。 それ以外の場合は、このメソッドはScatteringByteChannelインタフェースの指定どおりに動作します。

      定義:
      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インタフェースの指定どおりに動作します。

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

      public abstract int write​(ByteBuffer src) throws IOException
      このチャネルへデータグラムを書き込みます。

      このメソッドは、このチャネルのソケットが接続されている場合に限り呼び出すことができ、そのソケットのピアに直接データグラムを送信します。 それ以外の場合は、WritableByteChannelインタフェースの指定どおりに動作します。

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

      public abstract long write​(ByteBuffer[] srcs, int offset, int length) throws IOException
      このチャネルへデータグラムを書き込みます。

      このメソッドは、このチャネルのソケットが接続されている場合に限り呼び出すことができ、そのソケットのピアに直接データグラムを送信します。 それ以外の場合は、GatheringByteChannelインタフェースの指定どおりに動作します。

      定義:
      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インタフェースの指定どおりに動作します。

      定義:
      write、インタフェース: GatheringByteChannel
      パラメータ:
      srcs - バイトの取得先バッファ
      戻り値:
      送信バイト数。このメソッドを呼び出したときにソース・バッファ内に残っていたバイト数。このチャネルが非ブロック・モードで動作しており、基準となる出力バッファの容量が不十分なためデータグラムが収まりきらない場合はゼロ
      例外:
      NotYetConnectedException - このチャネルのソケットが接続されていない場合
      ClosedChannelException - このチャネルがクローズしている場合
      AsynchronousCloseException - 書込み操作の進行中に別のスレッドによってこのチャネルがクローズされた場合
      ClosedByInterruptException - 書込み中に別のスレッドからの割込みがあったためにチャネルがクローズし、現在のスレッドの割込みステータスが設定された場合
      IOException - その他の入出力エラーが発生した場合
    • getLocalAddress

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

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

      セキュリティ・マネージャが設定されている場合は、セキュリティ・マネージャのcheckConnectメソッドがローカル・アドレスおよび-1を引数として呼び出され、操作が許可されるかどうかが確認されます。 この操作が許可されない場合は、ループバック・アドレスおよびチャネルのソケットのローカル・ポートを表すSocketAddressが返されます。

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