JavaTM 2 Platform
Standard Ed. 5.0

java.nio.channels
クラス SelectionKey

java.lang.Object
  上位を拡張 java.nio.channels.SelectionKey
直系の既知のサブクラス:
AbstractSelectionKey

public abstract class SelectionKey
extends Object

SelectableChannelSelector に登録されていることを示すトークンです。

チャネルをセレクタに登録するたびに、選択キーが作成されます。このキーは、キーの cancel メソッドの呼び出しや、チャネルまたはセレクタのクローズによって取り消されるまで有効です。取り消されたキーがただちにセレクタから削除されるわけではありません。取り消されたキーは、次の選択操作時に削除が実行されるまで、セレクタの取り消されたキーセット内に保持されます。キーの有効性は、isValid メソッドを呼び出すことで確認できます。

選択キーには、整数値で表された 2 つの「操作セット」があります。操作セットのビットは、キーのチャネルによってサポートされている選択可能な操作のカテゴリを示します。

選択キーの実行可能セットは、そのチャネルがある操作カテゴリを実行できる状態になっていることを示します。ただし、これは単なるヒントであって、スレッドがブロックされることなくそのカテゴリの操作を実行できることを保証するわけではありません。通常、実行可能セットは、選択操作完了直後は正確ですが、外部イベントや対応するチャネル上で呼び出される入出力操作によって不正確になる可能性があります。

このクラスは既知のすべての操作セットビットを定義しますが、特定のチャネルによってどのビットがサポートされるかは、正確にはチャネルの種類によって異なります。SelectableChannel の個々のサブクラスは、validOps() メソッドを定義し、このメソッドはチャネルによってサポートされる操作だけを示すセットを返します。キーのチャネルによってサポートされていない操作セットビットを設定またはテストしようとすると、該当する実行時例外がスローされます。

多くの場合、アプリケーション固有のデータを選択キーに関連付ける必要があります。たとえば、あるプロトコルを実装するために、その上位プロトコルの状態を示し、実行可能通知を処理するオブジェクトがこれに該当します。このため、選択キーは、単一の任意オブジェクトをキーに「添付」する機能をサポートしています。attach メソッドでオブジェクトを添付し、あとから attachment メソッドでこのオブジェクトを取得できます。

選択キーは複数の並行スレッドで安全に使用できます。通常、対象セットの読み込みおよび書き込み操作は、セレクタの特定の操作に同期します。この同期処理の方法は実装によって異なります。ネイティブ実装では、選択操作の実行中、対象セットの読み込みや書き込みは無期限にブロックされます。高性能実装では、対象セットの読み込みや書き込みは、ブロックされるとしてもほんの短時間であり、まったくブロックされないこともあります。いずれの場合も、選択操作では常に、その操作を開始した時点で最新の対象セットの値が使用されます。

導入されたバージョン:
1.4
関連項目:
SelectableChannel, Selector

フィールドの概要
static int OP_ACCEPT
          ソケット受け付け操作用の操作セットビットです。
static int OP_CONNECT
          ソケット接続操作用の操作セットビットです。
static int OP_READ
          読み込み操作用の操作セットビットです。
static int OP_WRITE
          書き込み操作用の操作セットビットです。
 
コンストラクタの概要
protected SelectionKey()
          このクラスのインスタンスを構築します。
 
メソッドの概要
 Object attach(Object ob)
          このキーに指定されたオブジェクトを添付します。
 Object attachment()
          現在の添付オブジェクトを取得します。
abstract  void cancel()
          このキーのセレクタへの登録を解除することを要求します。
abstract  SelectableChannel channel()
          作成されたこのキーのチャネルを返します。
abstract  int interestOps()
          このキーの対象セットを取得します。
abstract  SelectionKey interestOps(int ops)
          このキーの対象セットを指定された値にします。
 boolean isAcceptable()
          このキーのチャネルが新しいソケット接続を受け付けられる状態になっているかどうかをテストします。
 boolean isConnectable()
          このキーのチャネルがソケット接続操作を正しく完了したか失敗したかをテストします。
 boolean isReadable()
          このキーのチャネルが読み込み可能な状態になっているかどうかをテストします。
abstract  boolean isValid()
          このキーが有効であるかどうかを判断します。
 boolean isWritable()
          このキーのチャネルが書き込み可能な状態になっているかどうかをテストします。
abstract  int readyOps()
          このキーの実行可能操作セットを取得します。
abstract  Selector selector()
          作成されたこのキーのセレクタを返します。
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

フィールドの詳細

OP_READ

public static final int OP_READ
読み込み操作用の操作セットビットです。

選択操作の開始時に、選択キーの対象セットに OP_READ が含まれているとします。その場合、対応するチャネルが読み込み可能な状態になっているか、ストリームの終わりに達しているか、次の読み込みができるようにリモートシャットダウンされているか、エラーによって一時停止していることを検出すると、セレクタは、キーの実行可能操作セットに OP_READ を追加し、このキーを選択キーセットに追加します。

関連項目:
定数フィールド値

OP_WRITE

public static final int OP_WRITE
書き込み操作用の操作セットビットです。

選択操作の開始時に、選択キーの対象セットに OP_WRITE が含まれているとします。その場合、対応するチャネルが書き込み可能な状態になっているか、次の書き込みができるようにリモートシャットダウンされているか、エラーによって一時停止していることを検出すると、セレクタは、キーの実行可能操作セットに OP_WRITE を追加し、このキーを選択キーセットに追加します。

関連項目:
定数フィールド値

OP_CONNECT

public static final int OP_CONNECT
ソケット接続操作用の操作セットビットです。

選択操作の開始時に、選択キーの対象セットに OP_CONNECT が含まれているとします。その場合、対応するソケットチャネルが接続シーケンスを完了できる状態になっているか、エラーによって一時停止していることを検出すると、セレクタは、キーの実行可能操作セットに OP_CONNECT を追加し、このキーを選択キーセットに追加します。

関連項目:
定数フィールド値

OP_ACCEPT

public static final int OP_ACCEPT
ソケット受け付け操作用の操作セットビットです。

選択操作の開始時に、選択キーの対象セットに OP_ACCEPT が含まれているとします。その場合、対応するサーバソケットチャネルが別の接続を受け付けられる状態になっているか、エラーによって一時停止していることを検出すると、セレクタは、キーの実行可能操作セットに OP_ACCEPT を追加し、このキーを選択キーセットに追加します。

関連項目:
定数フィールド値
コンストラクタの詳細

SelectionKey

protected SelectionKey()
このクラスのインスタンスを構築します。

メソッドの詳細

channel

public abstract SelectableChannel channel()
作成されたこのキーのチャネルを返します。このメソッドは、キーが取り消されたあともチャネルを返します。

戻り値:
このキーのチャネル

selector

public abstract Selector selector()
作成されたこのキーのセレクタを返します。このメソッドは、キーが取り消されたあともセレクタを返します。

戻り値:
このキーのセレクタ

isValid

public abstract boolean isValid()
このキーが有効であるかどうかを判断します。

キーは、作成された時点から、取り消されるか、チャネルまたはセレクタがクローズするまで有効です。

戻り値:
このキーが有効である場合に限り true

cancel

public abstract void cancel()
このキーのセレクタへの登録を解除することを要求します。終了時、キーは無効になり、セレクタの取り消されたキーセットに追加されます。このキーは、次の選択操作時に、すべてのセレクタのキーセットから削除されます。

このキーがすでに取り消されている場合は、このメソッドを呼び出しても何も起こりません。いったん取り消されたキーは、それ以後ずっと無効です。

このメソッドはいつでも呼び出すことができます。セレクタの取り消されたキーセットとの同期がとられるため、同じセレクタを使用する取り消し操作または選択操作中に重複して呼び出すと、一時的にブロックされます。


interestOps

public abstract int interestOps()
このキーの対象セットを取得します。

返されるセットには、このキーのチャネルにとって有効な操作ビットだけが含まれます。

このメソッドはいつでも呼び出すことができます。ブロックされるかどうかと、ブロックされるとしたらどのくらいの期間になるかは、実装によって異なります。

戻り値:
このキーの対象セット
例外:
CancelledKeyException - このキーが取り消された場合

interestOps

public abstract SelectionKey interestOps(int ops)
このキーの対象セットを指定された値にします。

このメソッドはいつでも呼び出すことができます。ブロックされるかどうかと、ブロックされるとしたらどのくらいの期間になるかは、実装によって異なります。

パラメータ:
ops - 新しい対象セット
戻り値:
この選択キー
例外:
IllegalArgumentException - セット内のビットがこのキーのチャネルでサポートされる操作に対応していない場合 (set & ~(channel().validOps()) != 0)
CancelledKeyException - このキーが取り消された場合

readyOps

public abstract int readyOps()
このキーの実行可能操作セットを取得します。

返されるセットには、このキーのチャネルにとって有効な操作ビットだけが含まれます。

戻り値:
このキーの実行可能操作セット
例外:
CancelledKeyException - このキーが取り消された場合

isReadable

public final boolean isReadable()
このキーのチャネルが読み込み可能な状態になっているかどうかをテストします。

このメソッドを k.isReadable() の形式で呼び出した場合、次の式と同じ結果が得られます。

 k.readyOps() & OP_READ != 0

このキーのチャネルが読み込み操作をサポートしない場合、このメソッドは常に false を返します。

戻り値:
readyOps() & OP_READ の値がゼロ以外の場合に限り true
例外:
CancelledKeyException - このキーが取り消された場合

isWritable

public final boolean isWritable()
このキーのチャネルが書き込み可能な状態になっているかどうかをテストします。

このメソッドを k.isWritable() の形式で呼び出した場合、次の式と同じ結果が得られます。

 k.readyOps() & OP_WRITE != 0

このキーのチャネルが書き込み操作をサポートしない場合、このメソッドは常に false を返します。

戻り値:
readyOps() & OP_WRITE の値がゼロ以外の場合に限り true
例外:
CancelledKeyException - このキーが取り消された場合

isConnectable

public final boolean isConnectable()
このキーのチャネルがソケット接続操作を正しく完了したか失敗したかをテストします。

このメソッドを k.isConnectable() の形式で呼び出した場合、次の式と同じ結果が得られます。

 k.readyOps() & OP_CONNECT != 0

このキーのチャネルがソケット接続操作をサポートしない場合、このメソッドは常に false を返します。

戻り値:
readyOps() & OP_CONNECT の値がゼロ以外の場合に限り true
例外:
CancelledKeyException - このキーが取り消された場合

isAcceptable

public final boolean isAcceptable()
このキーのチャネルが新しいソケット接続を受け付けられる状態になっているかどうかをテストします。

このメソッドを k.isAcceptable() の形式で呼び出した場合、次の式と同じ結果が得られます。

 k.readyOps() & OP_ACCEPT != 0

このキーのチャネルがソケット受け付け操作をサポートしない場合、このメソッドは常に false を返します。

戻り値:
readyOps() & OP_ACCEPT の値がゼロ以外の場合に限り true
例外:
CancelledKeyException - このキーが取り消された場合

attach

public final Object attach(Object ob)
このキーに指定されたオブジェクトを添付します。

添付されたオブジェクトは、あとで attachment メソッドを使って取得できます。同時に複数のオブジェクトを添付することはできません。このメソッドを呼び出すと、それ以前に添付されたオブジェクトは破棄されます。null を添付すると、現在の添付オブジェクトが破棄されます。

パラメータ:
ob - 添付されるオブジェクト。null の場合もある
戻り値:
以前に添付されたオブジェクトがある場合はそのオブジェクト、それ以外の場合は null

attachment

public final Object attachment()
現在の添付オブジェクトを取得します。

戻り値:
このキーに現在添付されているオブジェクト。添付オブジェクトがない場合は null

JavaTM 2 Platform
Standard Ed. 5.0

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

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