public abstract class SelectionKey extends Object
SelectableChannel
がSelector
に登録されていることを示すトークンです。
チャネルをセレクタに登録するたびに、選択キーが作成されます。このキーは、cancel
メソッドの呼び出しや、チャネルまたはセレクタのクローズによって取り消されるまで有効です。取り消されたキーがただちにセレクタから削除されるわけではありません。取り消されたキーは、次の選択操作中に、削除のためにセレクタの取り消されたキー・セットに追加されます。キーの有効性は、isValid
メソッドを呼び出すことによってテストできます。
選択キーには、整数値で表された2つの操作セットがあります。操作セットのビットは、キーのチャネルによってサポートされている選択可能な操作のカテゴリを示します。
対象セットは、次回セレクタの選択メソッドの1つを呼び出したときに実行可能性をテストする操作カテゴリを決定します。対象セットは、キーの作成時に初期化され、指定された値になります。この値は、後で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を返します。
readyOps() & OP_READ
の値がゼロ以外の場合にかぎりtrueCancelledKeyException
- このキーが取り消された場合public final boolean isWritable()
このメソッドをk.isWritable()の形式で呼び出した場合、次の式と同じ結果が得られます。
k.readyOps() & OP_WRITE != 0
このキーのチャネルが書込み操作をサポートしない場合、このメソッドは常にfalseを返します。
readyOps() & OP_WRITE
の値がゼロ以外の場合にかぎりtrueCancelledKeyException
- このキーが取り消された場合public final boolean isConnectable()
このメソッドをk.isConnectable()の形式で呼び出した場合、次の式と同じ結果が得られます。
k.readyOps() & OP_CONNECT != 0
このキーのチャネルがソケット接続操作をサポートしない場合、このメソッドは常にfalseを返します。
readyOps() & OP_CONNECT
の値がゼロ以外の場合にかぎりtrueCancelledKeyException
- このキーが取り消された場合public final boolean isAcceptable()
このメソッドをk.isAcceptable()の形式で呼び出した場合、次の式と同じ結果が得られます。
k.readyOps() & OP_ACCEPT != 0
このキーのチャネルがソケット受け付け操作をサポートしない場合、このメソッドは常にfalseを返します。
readyOps() & OP_ACCEPT
の値がゼロ以外の場合にかぎりtrueCancelledKeyException
- このキーが取り消された場合public final Object attach(Object ob)
添付されたオブジェクトは、後でattachment
メソッドを使って取得できます。同時に複数のオブジェクトを添付することはできません。このメソッドを呼び出すと、それ以前に添付されたオブジェクトは破棄されます。nullを添付すると、現在の添付オブジェクトが破棄されます。
ob
- 添付されるオブジェクト。nullの場合もあるpublic final Object attachment()
バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.