public abstract class SelectionKey extends Object
SelectableChannel
が Selector
に登録されていることを示すトークンです。
チャネルをセレクタに登録するたびに、選択キーが作成されます。このキーは、 選択キーには、整数値で表された 2 つの操作セットがあります。操作セットのビットは、キーのチャネルによってサポートされている選択可能な操作のカテゴリを示します。
対象セットは、次回セレクタの選択メソッドの 1 つを呼び出したときに実行可能性をテストする操作カテゴリを決定します。対象セットは、キーの作成時に初期化され、指定された値になります。この値は、あとで 実行可能セットは、キーのセレクタによって検出された実行可能なキーのチャネルの操作カテゴリを識別します。実行可能セットは、キーの作成時に初期化され、ゼロになります。この値は、その後の選択操作中にセレクタで更新できますが、直接更新することはできません。 選択キーの実行可能セットは、そのチャネルがある操作カテゴリを実行できる状態になっていることを示します。ただし、これは単なるヒントであって、スレッドがブロックされることなくそのカテゴリの操作を実行できることを保証するわけではありません。通常、実行可能セットは、選択操作完了直後は正確ですが、外部イベントや対応するチャネル上で呼び出される入出力操作によって不正確になる可能性があります。
このクラスは既知のすべての操作セットビットを定義しますが、どのビットが指定されたチャネルによってサポートされるかは、正確にはチャネルの種類によって異なります。 多くの場合、アプリケーション固有のデータを選択キーに関連付ける必要があります。たとえば、あるプロトコルを実装するために、その上位プロトコルの状態を示し、実行可能通知を処理するオブジェクトがこれに該当します。このため、選択キーは、単一の任意オブジェクトをキーに添付する機能をサポートしています。 選択キーは複数の並行スレッドで安全に使用できます。通常、対象セットの読み取りおよび書き込み操作は、セレクタの特定の操作に同期します。この同期処理の方法は実装によって異なります。ネイティブ実装では、選択操作がすでに進行中である場合、対象セットの読み取りや書き込みは無期限にブロックされます。高性能実装では、対象セットの読み取りや書き込みは、ブロックされたとしてもほんの短時間です。いずれの場合も、選択操作には常に、この操作を開始した時点で最新の対象セットの値が使用されます。 cancel
メソッドの呼び出しや、チャネルまたはセレクタのクローズによって取り消されるまで有効です。取り消されたキーがただちにセレクタから削除されるわけではありません。取り消されたキーは、次の選択操作中に、削除のためにセレクタの取り消されたキーセットに追加されます。キーの有効性は、isValid
メソッドを呼び出すことによってテストできます。
interestOps(int)
メソッドを使って変更できます。 SelectableChannel
の各サブクラスは validOps()
メソッドを定義し、このメソッドはチャネルによってサポートされる操作のみを示すセットを返します。キーのチャネルによってサポートされていない操作セットビットを設定またはテストしようとすると、適切な実行時例外がスローされます。
attach
メソッドでオブジェクトを添付したあと、attachment
メソッドでこのオブジェクトを取得できます。
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()
作成されたこのキーのセレクタを返します。
|
public static final int OP_READ
選択操作を始めるとき、選択キーの対象セットに OP_READ が含まれているとします。セレクタは、対応するチャネルが読み込み可能な状態になっているか、ストリームの終わりに達しているか、次の読み込みができるようにリモートシャットダウンされているか、エラーによって一時停止していることを検出すると、キーの実行可能操作セットに OP_READ を追加し、このキーを選択キーセットに追加します。
public static final int OP_WRITE
選択操作を始めるとき、選択キーの対象セットに OP_WRITE が含まれているとします。セレクタは、対応するチャネルが書き込み可能な状態になっているか、次の書き込みができるようにリモートシャットダウンされているか、エラーによって一時停止していることを検出すると、キーの実行可能操作セットに OP_WRITE を追加し、このキーを選択キーセットに追加します。
public static final int OP_CONNECT
選択操作を始めるとき、選択キーの対象セットに OP_CONNECT が含まれているとします。セレクタは、対応するソケットチャネルが接続シーケンスを完了できる状態になっているか、エラーによって一時停止していることを検出すると、キーの実行可能操作セットに OP_CONNECT を追加し、このキーを選択キーセットに追加します。
public abstract SelectableChannel channel()
public abstract Selector selector()
public abstract boolean isValid()
キーは、作成された時点から、取り消されるか、チャネルまたはセレクタがクローズするまで有効です。
public abstract void cancel()
このキーがすでに取り消されている場合は、このメソッドを呼び出しても何も起こりません。いったん取り消されたキーは以後永久に無効です。
このメソッドはいつでも呼び出すことができます。セレクタの取り消されたキーセットとの同期がとられるため、同じセレクタを使用する取り消し操作または選択操作中に並行して呼び出されると、一時的にブロックされます。
public abstract int interestOps()
返されるセットには、このキーのチャネルにとって有効な操作ビットだけが含まれます。
このメソッドはいつでも呼び出すことができます。ブロックされるかどうか、されるとしたらどのくらいの期間になるかは、実装によって異なります。
CancelledKeyException
- このキーが取り消された場合public abstract SelectionKey interestOps(int ops)
このメソッドはいつでも呼び出すことができます。ブロックされるかどうか、されるとしたらどのくらいの期間になるかは、実装によって異なります。
ops
- 新しい対象セットIllegalArgumentException
- セット内のビットがこのキーのチャネルでサポートされる操作に対応していない場合 ((ops & ~channel().validOps()) != 0 の場合)CancelledKeyException
- このキーが取り消された場合public abstract int readyOps()
返されるセットには、このキーのチャネルにとって有効な操作ビットだけが含まれます。
CancelledKeyException
- このキーが取り消された場合public final boolean isReadable()
このメソッドを k.isReadable() の形式で呼び出した場合、次の式と同じ結果が得られます。
k.readyOps() & OP_READ != 0
このキーのチャネルが読み込み操作をサポートしない場合、このメソッドは常に false を返します。
CancelledKeyException
- このキーが取り消された場合public final boolean isWritable()
このメソッドを k.isWritable() の形式で呼び出した場合、次の式と同じ結果が得られます。
k.readyOps() & OP_WRITE != 0
このキーのチャネルが書き込み操作をサポートしない場合、このメソッドは常に false を返します。
CancelledKeyException
- このキーが取り消された場合public final boolean isConnectable()
このメソッドを k.isConnectable() の形式で呼び出した場合、次の式と同じ結果が得られます。
k.readyOps() & OP_CONNECT != 0
このキーのチャネルがソケット接続操作をサポートしない場合、このメソッドは常に false を返します。
CancelledKeyException
- このキーが取り消された場合public final boolean isAcceptable()
このメソッドを k.isAcceptable() の形式で呼び出した場合、次の式と同じ結果が得られます。
k.readyOps() & OP_ACCEPT != 0
このキーのチャネルがソケット受け付け操作をサポートしない場合、このメソッドは常に false を返します。
CancelledKeyException
- このキーが取り消された場合public final Object attach(Object ob)
添付されたオブジェクトは、あとで attachment
メソッドを使って取得できます。同時に複数のオブジェクトを添付することはできません。このメソッドを呼び出すと、それ以前に添付されたオブジェクトは破棄されます。null を添付すると、現在の添付オブジェクトが破棄されます。
ob
- 添付されるオブジェクト。null の場合もあるpublic final Object attachment()
バグまたは機能を送信
詳細な API リファレンスおよび開発者ドキュメントについては、Java SE のドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.