Most visited

Recently visited

Added in API level 1

SelectionKey

public abstract class SelectionKey
extends Object

java.lang.Object
   ↳ java.nio.channels.SelectionKey
Known Direct Subclasses


代表 SelectableChannelSelector注册的令牌。

每次向选择器注册频道时都会创建一个选择键。 一个密钥保持有效,直到它通过调用其cancel方法,通过关闭其通道或关闭其选择器来取消 取消密钥不会立即将其从选择器中删除; 它将被添加到选择器的cancelled-key set以在下一次选择操作期间移除。 可以通过调用其isValid方法来测试密钥的有效性。

A selection key contains two operation sets represented as integer values. Each bit of an operation set denotes a category of selectable operations that are supported by the key's channel.

选择键的就绪集指示其通道已准备好进行某种操作类别是一种提示,但不是保证,这种类别中的操作可以由线程执行而不会导致线程阻塞。 就绪设置在选择操作完成后立即很可能是准确的。 外部事件和通过相应通道调用的I / O操作可能会使其不准确。

该类定义了所有已知的操作集位,但是给定通道支持哪些位取决于通道的类型。 SelectableChannel每个子类SelectableChannel定义了一个validOps()方法,该方法返回一个只识别通道支持的操作的集合。 尝试设置或测试密钥通道不支持的操作集位会导致适当的运行时异常。

通常有必要将某些应用程序特定的数据与选择键相关联,例如表示较高级别协议状态的对象,并处理准备就绪通知以实现该协议。 因此选择键支持单个任意对象的一个键的连接 一个对象可以通过attach方法连接,然后通过attachment方法检索。

选择键对于多个并发线程是安全的。 读取和写入兴趣集的操作通常将与选择器的某些操作同步。 这种同步的具体执行方式取决于实现:在一个天真的实现中,如果选择操作已在进行中,读取或写入兴趣集可能会无限期地阻塞; 在高性能的实现中,读取或写入兴趣集可能会暂时阻止,如果有的话。 在任何情况下,选择操作将始终使用操作开始时当前的兴趣值。

也可以看看:

Summary

Constants

int OP_ACCEPT

用于套接字接受操作的操作设置位。

int OP_CONNECT

套接字连接操作的操作设置位。

int OP_READ

读取操作的操作设置位。

int OP_WRITE

写操作的操作设置位。

Protected constructors

SelectionKey()

构造这个类的一个实例。

Public methods

final Object attach(Object ob)

将给定的对象附加到该键上。

final Object attachment()

检索当前附件。

abstract void cancel()

请求取消该密钥的频道注册。

abstract SelectableChannel channel()

返回此键创建的频道。

abstract int interestOps()

检索此密钥的兴趣集。

abstract SelectionKey interestOps(int ops)

将此键的兴趣集设置为给定值。

final boolean isAcceptable()

测试此密钥的通道是否准备好接受新的套接字连接。

final boolean isConnectable()

测试此密钥的通道是否已完成或未完成其套接字连接操作。

final boolean isReadable()

测试此密钥的频道是否准备好阅读。

abstract boolean isValid()

告诉这个键是否有效。

final boolean isWritable()

测试此密钥的通道是否准备好写入。

abstract int readyOps()

检索此密钥的就绪操作集。

abstract Selector selector()

返回为其创建此键的选择器。

Inherited methods

From class java.lang.Object

Constants

OP_ACCEPT

Added in API level 1
int OP_ACCEPT

用于套接字接受操作的操作设置位。

假设选择键的兴趣集在selection operation的开头包含OP_ACCEPT 如果选择器检测到相应的服务器套接字通道已准备好接受另一个连接,或者有一个待处理的错误,则它会将OP_ACCEPT添加到密钥的就绪集并将密钥添加到其所选密钥集中。

常量值:16(0x00000010)

OP_CONNECT

Added in API level 1
int OP_CONNECT

套接字连接操作的操作设置位。

假设选择键的兴趣集在selection operation的开头包含OP_CONNECT 如果选择器检测到相应的套接字通道已准备好完成其连接序列,或者有待处理的错误,那么它会将OP_CONNECT添加到该键的就绪集并将该关键字添加到其所选关键字集中。

常量值:8(0x00000008)

OP_READ

Added in API level 1
int OP_READ

读取操作的操作设置位。

假设选择键的兴趣集在selection operation的开头包含OP_READ 如果选择器检测到相应的通道已准备好读取,已到达流尾,已被远程关闭以供进一步读取,或者有待处理的错误,则它将添加OP_READ到该键的就绪操作集并添加它的选定键集的关键。

常数值:1(0x00000001)

OP_WRITE

Added in API level 1
int OP_WRITE

写操作的操作设置位。

假设选择键的兴趣集在selection operation的开头包含OP_WRITE 如果选择器检测到相应的通道已准备好写入,已被远程关闭以供进一步写入,或者有待处理的错误,则会将OP_WRITE添加到密钥的就绪集并将密钥添加到其所选密钥集中。

常量值:4(0x00000004)

Protected constructors

SelectionKey

Added in API level 1
SelectionKey ()

构造这个类的一个实例。

Public methods

attach

Added in API level 1
Object attach (Object ob)

将给定的对象附加到该键上。

稍后可以通过attachment方法检索附加对象。 一次只能附加一个对象; 调用此方法会导致任何以前的附件被丢弃。 附件null可能会丢弃当前附件。

Parameters
ob Object: The object to be attached; may be null
Returns
Object The previously-attached object, if any, otherwise null

attachment

Added in API level 1
Object attachment ()

检索当前附件。

Returns
Object The object currently attached to this key, or null if there is no attachment

cancel

Added in API level 1
void cancel ()

请求取消该密钥的频道注册。 返回时,密钥将无效,并将被添加到其选择器的取消密钥集中。 在下一次选择操作期间,键将从所有选择器的键组中移除。

如果该键已被取消,则调用此方法不起作用。 一旦取消,钥匙永远无效。

这个方法可以在任何时候调用。 它在选择器的已取消密钥集上同步,因此如果与涉及相同选择器的取消或选择操作同时进行调用,则可能暂时阻止。

channel

Added in API level 1
SelectableChannel channel ()

返回此键创建的频道。 即使密钥被取消,该方法仍将继续返回通道。

Returns
SelectableChannel This key's channel

interestOps

Added in API level 1
int interestOps ()

检索此密钥的兴趣集。

保证返回的集合只包含对该密钥通道有效的操作位。

这个方法可以在任何时候调用。 无论是否阻止以及实施依赖多长时间。

Returns
int This key's interest set
Throws
CancelledKeyException If this key has been cancelled

interestOps

Added in API level 1
SelectionKey interestOps (int ops)

将此键的兴趣集设置为给定值。

这个方法可以在任何时候调用。 无论是否阻止以及实施依赖多长时间。

Parameters
ops int: The new interest set
Returns
SelectionKey This selection key
Throws
IllegalArgumentException If a bit in the set does not correspond to an operation that is supported by this key's channel, that is, if (ops & ~channel().validOps()) != 0
CancelledKeyException If this key has been cancelled

isAcceptable

Added in API level 1
boolean isAcceptable ()

测试此密钥的通道是否准备好接受新的套接字连接。

表达式 k.isAcceptable()的这种方法的调用的行为与表达式完全相同

 k.readyOps() & OP_ACCEPT != 0

如果此密钥的频道不支持套接字接受操作,则此方法始终返回 false

Returns
boolean true if, and only if, readyOps() & OP_ACCEPT is nonzero
Throws
CancelledKeyException If this key has been cancelled

isConnectable

Added in API level 1
boolean isConnectable ()

测试此密钥的通道是否已完成或未完成其套接字连接操作。

表单 k.isConnectable()的此方法的调用与 表达式的行为方式完全相同

 k.readyOps() & OP_CONNECT != 0

如果此密钥的频道不支持套接字连接操作,则此方法始终返回 false

Returns
boolean true if, and only if, readyOps() & OP_CONNECT is nonzero
Throws
CancelledKeyException If this key has been cancelled

isReadable

Added in API level 1
boolean isReadable ()

测试此密钥的频道是否准备好阅读。

表单 k.isReadable()的此方法的调用与 表达式的行为完全相同

 k.readyOps() & OP_READ != 0

如果此键的通道不支持读取操作,则此方法始终返回 false

Returns
boolean true if, and only if, readyOps() & OP_READ is nonzero
Throws
CancelledKeyException If this key has been cancelled

isValid

Added in API level 1
boolean isValid ()

告诉这个键是否有效。

密钥在创建时是有效的,并且一直保持到它被取消,其频道关闭或者其选择器关闭。

Returns
boolean true if, and only if, this key is valid

isWritable

Added in API level 1
boolean isWritable ()

测试此密钥的通道是否准备好写入。

表单 k.isWritable()的此方法的调用与表达式的使用方式完全相同

 k.readyOps() & OP_WRITE != 0

如果此键的通道不支持写入操作,则此方法始终返回 false

Returns
boolean true if, and only if, readyOps() & OP_WRITE is nonzero
Throws
CancelledKeyException If this key has been cancelled

readyOps

Added in API level 1
int readyOps ()

检索此密钥的就绪操作集。

保证返回的集合只包含对该密钥通道有效的操作位。

Returns
int This key's ready-operation set
Throws
CancelledKeyException If this key has been cancelled

selector

Added in API level 1
Selector selector ()

返回为其创建此键的选择器。 即使密钥被取消,该方法仍会继续返回选择器。

Returns
Selector This key's selector

Hooray!