|
JavaTM 2 Platform Standard Ed. 5.0 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
java.lang.Object java.nio.channels.SelectionKey
public abstract class SelectionKey
SelectableChannel
が Selector
に登録されていることを示すトークンです。
チャネルをセレクタに登録するたびに、選択キーが作成されます。このキーは、キーの 選択キーには、整数値で表された 2 つの「操作セット」があります。操作セットのビットは、キーのチャネルによってサポートされている選択可能な操作のカテゴリを示します。
「対象セット」は、次回にセレクタの選択メソッドが呼び出されたときに実行可能性をテストする操作カテゴリを決定する。対象セットは、キーの作成時に初期化され、指定された値になる。この値は、あとで 「実行可能セット」は、キーのセレクタによって検出された実行可能なチャネルの操作カテゴリを識別する。実行可能セットは、キーの作成時に初期化され、ゼロになる。この値は、その後の選択操作中にセレクタにより更新されることがあるが、直接更新することはできない 選択キーの実行可能セットは、そのチャネルがある操作カテゴリを実行できる状態になっていることを示します。ただし、これは単なるヒントであって、スレッドがブロックされることなくそのカテゴリの操作を実行できることを保証するわけではありません。通常、実行可能セットは、選択操作完了直後は正確ですが、外部イベントや対応するチャネル上で呼び出される入出力操作によって不正確になる可能性があります。
このクラスは既知のすべての操作セットビットを定義しますが、特定のチャネルによってどのビットがサポートされるかは、正確にはチャネルの種類によって異なります。 多くの場合、アプリケーション固有のデータを選択キーに関連付ける必要があります。たとえば、あるプロトコルを実装するために、その上位プロトコルの状態を示し、実行可能通知を処理するオブジェクトがこれに該当します。このため、選択キーは、単一の任意オブジェクトをキーに「添付」する機能をサポートしています。 選択キーは複数の並行スレッドで安全に使用できます。通常、対象セットの読み込みおよび書き込み操作は、セレクタの特定の操作に同期します。この同期処理の方法は実装によって異なります。ネイティブ実装では、選択操作の実行中、対象セットの読み込みや書き込みは無期限にブロックされます。高性能実装では、対象セットの読み込みや書き込みは、ブロックされるとしてもほんの短時間であり、まったくブロックされないこともあります。いずれの場合も、選択操作では常に、その操作を開始した時点で最新の対象セットの値が使用されます。
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()
作成されたこのキーのセレクタを返します。 |
クラス java.lang.Object から継承されたメソッド |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
フィールドの詳細 |
---|
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 static final int OP_ACCEPT
選択操作の開始時に、選択キーの対象セットに OP_ACCEPT が含まれているとします。その場合、対応するサーバソケットチャネルが別の接続を受け付けられる状態になっているか、エラーによって一時停止していることを検出すると、セレクタは、キーの実行可能操作セットに OP_ACCEPT を追加し、このキーを選択キーセットに追加します。
コンストラクタの詳細 |
---|
protected SelectionKey()
メソッドの詳細 |
---|
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
- セット内のビットがこのキーのチャネルでサポートされる操作に対応していない場合 (set & ~(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()
|
JavaTM 2 Platform Standard Ed. 5.0 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
Copyright 2004 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。