- 直系の既知のサブクラス:
AbstractSelectionKey
public abstract class SelectionKey extends Object
SelectableChannel
がSelector
に登録されていることを示すトークンです。
チャネルをセレクタに登録するたびに、選択キーが作成されます。 このキーは、cancel
メソッドの呼び出しや、チャネルまたはセレクタのクローズによって取り消されるまで有効です。 取り消されたキーがただちにセレクタから削除されるわけではありません。取り消されたキーは、次の選択操作中に、削除のためにセレクタの取り消されたキー・セットに追加されます。 キーの有効性は、isValid
メソッドを呼び出すことによってテストできます。
選択キーには、整数値で表された2つの操作セットがあります。 操作セットのビットは、キーのチャネルによってサポートされている選択可能な操作のカテゴリを示します。
対象セットは、次回セレクタの選択メソッドの1つを呼び出したときに実行可能性をテストする操作カテゴリを決定します。 対象セットは、キーの作成時に初期化され、指定された値になります。この値は、後で
interestOps(int)
メソッドを使って変更できます。実行可能セットは、キーのセレクタによって検出された実行可能なキーのチャネルの操作カテゴリを識別します。 実行可能セットは、キーの作成時に初期化され、ゼロになります。この値は、その後の選択操作中にセレクタで更新できますが、直接更新することはできません。
選択キーの実行可能セットは、そのチャネルがある操作カテゴリを実行できる状態になっていることを示します。 ただし、これは単なるヒントであって、スレッドがブロックされることなくそのカテゴリの操作を実行できることを保証するわけではありません。 通常、実行可能セットは、選択操作完了直後は正確ですが、外部イベントや対応するチャネル上で呼び出される入出力操作によって不正確になる可能性があります。
このクラスは既知のすべての操作セット・ビットを定義しますが、どのビットが指定されたチャネルによってサポートされるかは、正確にはチャネルの種類によって異なります。 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)
このキーの対象セットを指定された値にします。int
interestOpsAnd(int ops)
この重要な関心セットは、既存の関心セットと指定された値について、ビット単位の共通部分になる(and)に原子的に設定されます。int
interestOpsOr(int ops)
この重要な関心事項は、既存の関心セットと指定された値のビット単位のユニオン(or)に設定されます。boolean
isAcceptable()
このキーのチャネルが新しいソケット接続を受け付けられる状態になっているかどうかをテストします。boolean
isConnectable()
このキーのチャネルがソケット接続操作を正しく完了したか失敗したかをテストします。boolean
isReadable()
このキーのチャネルが読込み可能な状態になっているかどうかをテストします。abstract boolean
isValid()
このキーが有効であるかどうかを判断します。boolean
isWritable()
このキーのチャネルが書込み可能な状態になっているかどうかをテストします。abstract int
readyOps()
このキーの実行可能操作セットを取得します。abstract Selector
selector()
作成されたこのキーのセレクタを返します。
-
フィールド詳細
-
OP_READ
public static final int OP_READ読込み操作用の操作セット・ビットです。選択操作を始めるとき、選択キーの対象セットに
OP_READ
が含まれているとします。 対応するチャネルが読込み可能であること、ストリームの終わりに達したこと、さらに読み込みのためにリモートでシャットダウンしたこと、またはエラーが保留中であることがセレクタによって検出された場合、すぐにキー操作セットにOP_READ
が追加されます。- 関連項目:
- 定数フィールド値
-
OP_WRITE
public static final int 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
が含まれているとします。 セレクタによって、対応するサーバー・ソケット・チャネルが別の接続を受け入れる準備ができているか、または保留中のエラーがあることが検出された場合は、そのキーが準備完了のキーに追加されます。- 関連項目:
- 定数フィールド値
-
-
コンストラクタの詳細
-
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
- セット内のビットがこのキーのチャネルでサポートされる操作に対応していない場合((ops & ~channel().validOps()) != 0
の場合)CancelledKeyException
- このキーが取り消された場合
-
interestOpsOr
public int interestOpsOr(int ops)この重要な関心事項は、既存の関心セットと指定された値のビット単位のユニオン(or)に設定されます。 このメソッドは、このメソッドまたはinterestOpsAnd(int)
に対する他の同時コールに関して原子的であることが保証されます。このメソッドはいつでも呼び出すことができます。 選択操作の進行中にこのメソッドが呼び出された場合、その操作には影響しません。重要な目的セットへの変更は、次の選択操作によって確認されます。
- 実装要件:
- デフォルトの実装はこのキーを同期し、
interestOps()
とinterestOps(int)
を起動して、この重要な関心セットを取得および設定します。 - パラメータ:
ops
- 適用する対象セット- 戻り値:
- 前回の関心セット
- 例外:
IllegalArgumentException
- セット内のビットがこのキーのチャネルでサポートされる操作に対応していない場合((ops & ~channel().validOps()) != 0
の場合)CancelledKeyException
- このキーが取り消された場合- 導入されたバージョン:
- 11
-
interestOpsAnd
public int interestOpsAnd(int ops)この重要な関心セットは、既存の関心セットと指定された値について、ビット単位の共通部分になる(and)に原子的に設定されます。 このメソッドは、このメソッドまたはinterestOpsOr(int)
に対する他の同時コールに関して原子的であることが保証されます。このメソッドはいつでも呼び出すことができます。 選択操作の進行中にこのメソッドが呼び出された場合、その操作には影響しません。重要な目的セットへの変更は、次の選択操作によって確認されます。
- APIの注:
interestOps(int)
メソッドとinterestOpsOr(int)
メソッドとは異なり、このメソッドは、このキー・チャネルでサポートされている操作に対応していない関心セットのビットを使って呼び出されたときにIllegalArgumentException
をスローしません。 これは、ビット単位の補足値を使用して、対象セットの操作ビットをクリアできるようにするために使用されます。たとえば、interestOpsAnd(~SelectionKey.OP_READ)
は、他のビットに影響を与えずに、対象セットからOP_READ
を削除します。- 実装要件:
- デフォルトの実装はこのキーを同期し、
interestOps()
とinterestOps(int)
を起動して、この重要な関心セットを取得および設定します。 - パラメータ:
ops
- 適用する対象セット- 戻り値:
- 前回の関心セット
- 例外:
CancelledKeyException
- このキーが取り消された場合- 導入されたバージョン:
- 11
-
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
このキーに指定されたオブジェクトを添付します。添付されたオブジェクトは、後で
attachment
メソッドを使って取得できます。 同時に複数のオブジェクトを添付することはできません。このメソッドを呼び出すと、それ以前に添付されたオブジェクトは破棄されます。null
を添付すると、現在の添付オブジェクトが破棄されます。- パラメータ:
ob
- 添付されるオブジェクト。null
の場合もある- 戻り値:
- 以前に添付されたオブジェクトがある場合はそのオブジェクト、それ以外の場合は
null
-
attachment
public final Object attachment()現在の添付オブジェクトを取得します。- 戻り値:
- このキーに現在添付されているオブジェクト。添付オブジェクトがない場合は
null
-