JavaTM Platform
Standard Ed. 6

java.nio.channels
クラス DatagramChannel

java.lang.Object
  上位を拡張 java.nio.channels.spi.AbstractInterruptibleChannel
      上位を拡張 java.nio.channels.SelectableChannel
          上位を拡張 java.nio.channels.spi.AbstractSelectableChannel
              上位を拡張 java.nio.channels.DatagramChannel
すべての実装されたインタフェース:
Closeable, ByteChannel, Channel, GatheringByteChannel, InterruptibleChannel, ReadableByteChannel, ScatteringByteChannel, WritableByteChannel

public abstract class DatagramChannel
extends AbstractSelectableChannel
implements ByteChannel, ScatteringByteChannel, GatheringByteChannel

データグラム型ソケットの選択可能なチャネルです。  

データグラムチャネルは、ネットワークデータグラムソケットの完全な抽象化ではありません。ソケットオプションのバインドと操作は、socket メソッド呼び出しによって取得した関連 DatagramSocket オブジェクトを介して行う必要があります。任意の既存データグラムソケットのチャネルを作成したり、データグラムチャネルに関連したデータグラムソケットで DatagramSocketImpl オブジェクトを使用するように指定することはできません。  

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

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

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

導入されたバージョン:
1.4

コンストラクタの概要
protected DatagramChannel(SelectorProvider provider)
          このクラスの新しいインスタンスを初期化します。
 
メソッドの概要
abstract  DatagramChannel connect(SocketAddress remote)
          このチャネルのソケットを接続します。
abstract  DatagramChannel disconnect()
          このチャネルのソケットの接続を切断します。
abstract  boolean isConnected()
          このチャネルのソケットが接続されているかどうかを判断します。
static DatagramChannel open()
          データグラムチャネルをオープンします。
abstract  int read(ByteBuffer dst)
          このチャネルからデータグラムを読み込みます。
 long read(ByteBuffer[] dsts)
          このチャネルからデータグラムを読み込みます。
abstract  long read(ByteBuffer[] dsts, int offset, int length)
          このチャネルからデータグラムを読み込みます。
abstract  SocketAddress receive(ByteBuffer dst)
          このチャネルからデータグラムを受信します。
abstract  int send(ByteBuffer src, SocketAddress target)
          このチャネルからデータグラムを送信します。
abstract  DatagramSocket socket()
          このチャネルに関連したデータグラムソケットを取得します。
 int validOps()
          このチャネルのサポートされている操作を識別する操作セットを返します。
abstract  int write(ByteBuffer src)
          このチャネルへデータグラムを書き込みます。
 long write(ByteBuffer[] srcs)
          このチャネルへデータグラムを書き込みます。
abstract  long write(ByteBuffer[] srcs, int offset, int length)
          このチャネルへデータグラムを書き込みます。
 
クラス java.nio.channels.spi.AbstractSelectableChannel から継承されたメソッド
blockingLock, configureBlocking, implCloseChannel, implCloseSelectableChannel, implConfigureBlocking, isBlocking, isRegistered, keyFor, provider, register
 
クラス java.nio.channels.SelectableChannel から継承されたメソッド
register
 
クラス java.nio.channels.spi.AbstractInterruptibleChannel から継承されたメソッド
begin, close, end, isOpen
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
インタフェース java.nio.channels.Channel から継承されたメソッド
close, isOpen
 

コンストラクタの詳細

DatagramChannel

protected DatagramChannel(SelectorProvider provider)
このクラスの新しいインスタンスを初期化します。

メソッドの詳細

open

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

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

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

validOps

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

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

定義:
クラス SelectableChannel 内の validOps
戻り値:
有効な操作セット

socket

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

返されるオブジェクトは、DatagramSocket クラスで宣言されていない public メソッドは宣言しません。

戻り値:
このチャネルに関連したデータグラムソケット

isConnected

public abstract boolean isConnected()
このチャネルのソケットが接続されているかどうかを判断します。

戻り値:
このチャネルのソケットが接続されている場合にかぎり true

connect

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

チャネルのソケットは、指定されたリモート「ピア」アドレス以外とはデータグラムをやりとりしないように構成されています。接続後、指定されたアドレス以外のアドレスとデータグラムがやりとりされることはありません。データグラムソケットは、接続を明示的に切断するかクローズするまで接続されたままになります。  

このメソッドは、DatagramSocket クラスの connect メソッドとまったく同じセキュリティーチェックを行います。セキュリティーマネージャーがインストールされている場合は、checkAccept メソッドが指定されたリモートアドレスからのデータグラムの受信を許可し、checkConnect メソッドが指定されたリモートアドレスへのデータグラムの送信を許可することを確認します。  

このメソッドはいつでも呼び出すことができます。呼び出し時に進行中の読み込み操作または書き込み操作には一切影響を及ぼしません。

パラメータ:
remote - このチャネルの接続先リモートアドレス
戻り値:
このデータグラムチャネル
例外:
ClosedChannelException - このチャネルがクローズしている場合
AsynchronousCloseException - 接続操作の進行中に、別のスレッドによってこのチャネルがクローズされた場合
ClosedByInterruptException - 接続操作の進行中に別のスレッドからの割り込みがあったためにチャネルがクローズし、現在のスレッドの割り込み状態が設定された場合
SecurityException - セキュリティーマネージャーがインストールされていて、指定されたリモートアドレスへのアクセスが許可されていない場合
IOException - その他の入出力エラーが発生した場合

disconnect

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

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

このメソッドはいつでも呼び出すことができます。呼び出し時に進行中の読み込み操作または書き込み操作には一切影響を及ぼしません。  

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

戻り値:
このデータグラムチャネル
例外:
IOException - その他の入出力エラーが発生した場合

receive

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

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

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

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

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

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

send

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

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

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

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

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

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

read

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

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

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

read

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

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

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

read

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

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

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

write

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

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

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

write

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

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

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

write

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

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

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

JavaTM Platform
Standard Ed. 6

バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。

Copyright 2009 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。