public abstract class SelectionKey extends Object
Selector
SelectableChannel
登记。
每次在一个通道注册一个选择器时,创建一个选择键。一个关键的仍然有效,直到取消cancel
通过调用其方法,关闭通道,或关闭其选择器。取消键不立即将其从选择器;反而是添加到选择器的cancelled-key set去除选择未来运行过程中。一个关键的有效性可以通过调用其isValid
法测试。
一个选择键包含两操作设置表示为整数的值。操作集的每一位表示由密钥的信道支持的可选择操作的类别。
的兴趣集决定哪些操作类别将测试准备下一次的选择器的选择方法被调用。利益集初始化为给定的值时,关键是创造;它可能会通过interestOps(int)
方法改变。
的准备标识操作类的关键的通道已被检测到的关键的选择做好准备。在创建密钥时,准备好的集合被初始化为零;它可能稍后在选择操作期间由选择器进行更新,但它不能直接更新。
一个选择键的准备设置表明,它的通道是准备一些操作类别是一个提示,但不是一个保证,在这样一个类别的操作可以由一个线程执行,而不会导致线程块。一个现成的设置是最有可能是准确的,立即完成后,一个选择操作。它很可能是由外部事件和由I / O操作,被调用在相应的通道上作出不准确的。
这个类定义了所有已知的操作集位,但正是哪一位是由一个给定的信道支持取决于信道的类型。每个类定义一个validOps()
SelectableChannel
方法返回一个集合识别那些操作是由信道支持。设置或测试一个不支持由密钥的信道支持的操作集位的尝试将导致在一个适当的运行时异常。
通常是必要的,将一些特定于应用程序的数据与一个选择键,例如一个对象,代表一个更高级别的协议的状态,并处理就绪通知,以实现该协议。选择键因此支持一个单一的任意对象的一个关键的附件。一个对象可以通过附带的attach
方法然后通过attachment
检索方法。
选择键是安全的,使用多个并发线程。阅读和写作的操作的兴趣集将,在一般情况下,与某些操作的选择器同步。究竟如何同步执行是依赖于实现的:在一个天真的实现,读或写的兴趣集可能会被无限期地,如果一个选择操作已经在进行中,在高性能的实现,阅读或写的兴趣集可以块简要,如果在所有。在任何情况下,一个选择操作将总是使用在操作开始时的当前的兴趣集值。
SelectableChannel
,
Selector
Modifier and Type | Field and Description |
---|---|
static int |
OP_ACCEPT
套接字接受操作的操作设置位。
|
static int |
OP_CONNECT
套接字连接操作的操作设置位。
|
static int |
OP_READ
读取操作的操作集位。
|
static int |
OP_WRITE
写入操作的操作集位。
|
Modifier | Constructor and Description |
---|---|
protected |
SelectionKey()
构造这个类的一个实例。
|
Modifier and Type | Method and Description |
---|---|
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
假设一个选择键的兴趣集包含在一个selection operation开始OP_READ。如果选择检测到相应的通道准备阅读,已达到结束流,被远程关闭进一步阅读,或有错误发生,然后将它添加到关键的准备OP_READ操作集添加的关键选择的关键 集。
public static final int OP_WRITE
假设一个选择键的兴趣集包含在一个selection operation开始OP_WRITE。如果选择检测到相应的信道准备写作,被远程关闭继续写作,或者有错误发生,然后将它添加到OP_WRITE关键的准备和添加的关键选择的关键 集。
public static final int OP_CONNECT
假设一个选择键的兴趣集包含在一个selection operation开始OP_CONNECT。如果选择检测到相应的套接字通道准备完成其连接顺序,或有错误发生,然后将它添加到OP_CONNECT关键的准备和添加的关键选择的关键 集。
public static final int OP_ACCEPT
假设一个选择键的兴趣集包含在一个selection operation开始OP_ACCEPT。如果选择检测到相应的服务器套接字通道准备接受另一个连接,或者有错误发生,然后将它添加到OP_ACCEPT关键的准备和添加的关键选择的关键 集。
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
为零
CancelledKeyException
-如果此键被取消了
public final boolean isWritable()
这种形式的k.isWritable()方法调用的行为一样的表达
k.readyOps() & OP_WRITE != 0
如果这个关键的通道不支持写操作,那么这个方法总是返回false。
readyOps() & OP_WRITE
为零
CancelledKeyException
-如果此键被取消了
public final boolean isConnectable()
这种形式的k.isConnectable()方法调用的行为一样的表达
k.readyOps() & OP_CONNECT != 0
如果这个关键的通道不支持socket连接操作,然后该方法总是返回false。
readyOps() & OP_CONNECT
为零
CancelledKeyException
-如果此键被取消了
public final boolean isAcceptable()
这种形式的k.isAcceptable()方法调用的行为一样的表达
k.readyOps() & OP_ACCEPT != 0
如果这个关键的通道不支持socket接受操作此方法总是返回false。
readyOps() & OP_ACCEPT
为零
CancelledKeyException
-如果此键被取消了
public final Object attach(Object ob)
一个附加的对象可以在以后检索通过attachment
方法。只有一个对象可能被连接在一个时间;调用此方法会导致任何以前的附件被丢弃。当前附件可通过固定null丢弃。
ob
要连接的对象;可以
null
public final Object attachment()
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.