モジュール java.base
パッケージ java.nio.channels

クラスSelectionKey

java.lang.Object
java.nio.channels.SelectionKey
直系の既知のサブクラス:
AbstractSelectionKey

public abstract class SelectionKey
extends Object
SelectableChannelSelectorに登録されていることを示すトークンです。

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

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

  • 対象セットは、次回セレクタの選択メソッドの1つを呼び出したときに実行可能性をテストする操作カテゴリを決定します。 対象セットは、キーの作成時に初期化され、指定された値になります。この値は、後でinterestOps(int)メソッドを使って変更できます。

  • 実行可能セットは、キーのセレクタによって検出された実行可能なキーのチャネルの操作カテゴリを識別します。 実行可能セットは、キーの作成時に初期化され、ゼロになります。この値は、その後の選択操作中にセレクタで更新できますが、直接更新することはできません。

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

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

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

選択キーは複数の並行スレッドで安全に使用できます。 選択操作では、操作開始時点で現在だった関心セット値が常に使用されます。

導入されたバージョン:
1.4
関連項目:
SelectableChannelSelector
  • フィールドのサマリー

    フィールド 
    修飾子と型 フィールド 説明
    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()
    作成されたこのキーのセレクタを返します。

    クラス java.lang.Objectで宣言されたメソッド

    cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait
  • フィールド詳細

    • 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

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

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

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

      public final Object attachment()
      現在の添付オブジェクトを取得します。
      戻り値:
      このキーに現在添付されているオブジェクト。添付オブジェクトがない場合はnull