java.lang.Object
java.nio.channels.spi.AbstractInterruptibleChannel
java.nio.channels.SelectableChannel
java.nio.channels.spi.AbstractSelectableChannel
- 所有已实现的接口:
-
Closeable
,AutoCloseable
,Channel
,InterruptibleChannel
- 直接已知的子类:
-
DatagramChannel
,Pipe.SinkChannel
,Pipe.SourceChannel
,SctpChannel
,SctpMultiChannel
,SctpServerChannel
,ServerSocketChannel
,SocketChannel
可选择通道的基本实现类。
该类定义了处理通道注册、注销和关闭机制的方法。它维护了该通道的当前阻塞模式以及当前的选择键集合。它执行了实现SelectableChannel
规范所需的所有同步。该类中定义的受保护的抽象方法的实现不需要与可能正在执行相同操作的其他线程同步。
- 自 JDK 版本:
- 1.4
-
Constructor Summary
ModifierConstructorDescriptionprotected
AbstractSelectableChannel
(SelectorProvider provider) 初始化此类的新实例。 -
Method Summary
Modifier and TypeMethodDescriptionfinal Object
检索configureBlocking
和register
方法同步的对象。final SelectableChannel
configureBlocking
(boolean block) 调整此通道的阻塞模式。protected final void
关闭此通道。protected abstract void
关闭此可选择通道。protected abstract void
implConfigureBlocking
(boolean block) 调整此通道的阻塞模式。final boolean
告知此通道上的每个 I/O 操作是否会阻塞直到完成。final boolean
告知此通道当前是否已向任何选择器注册。final SelectionKey
检索表示通道与给定选择器注册的键。final SelectorProvider
provider()
返回创建此通道的提供程序。final SelectionKey
使用给定选择器注册此通道,返回选择键。Methods declared in class java.nio.channels.SelectableChannel
register, validOps
Methods declared in class java.nio.channels.spi.AbstractInterruptibleChannel
begin, close, end, isOpen
-
Constructor Details
-
AbstractSelectableChannel
初始化此类的新实例。- 参数:
-
provider
- 创建此通道的提供程序
-
-
Method Details
-
provider
返回创建此通道的提供程序。- 指定者:
-
provider
在类SelectableChannel
中 - 返回:
- 创建此通道的提供程序
-
isRegistered
public final boolean isRegistered()从类中复制的描述:SelectableChannel
告知此通道当前是否已向任何选择器注册。新创建的通道未注册。由于密钥取消和通道注销之间固有的延迟,通道可能在其所有密钥被取消后的一段时间内保持注册状态。通道也可能在关闭后的一段时间内保持注册状态。
- 指定者:
-
isRegistered
在类SelectableChannel
中 - 返回:
-
true
如果且仅如果此通道已注册
-
keyFor
从类中复制的描述:SelectableChannel
检索表示通道与给定选择器注册的键。- 指定者:
-
keyFor
在类SelectableChannel
中 - 参数:
-
sel
- 选择器 - 返回:
-
当此通道最后与给定选择器注册时返回的密钥,如果此通道当前未向该选择器注册,则返回
null
-
register
使用给定选择器注册此通道,返回选择键。此方法首先验证此通道是否打开,并且给定的初始兴趣集是否有效。
如果此通道已经向给定选择器注册,则返回表示该注册的选择键,并在设置其兴趣集为给定值后返回。
否则,此通道尚未向给定选择器注册,因此在持有适当的锁时调用选择器的
register
方法。生成的密钥将添加到此通道的密钥集中,然后返回。- 指定者:
-
register
在类SelectableChannel
中 - 参数:
-
sel
- 要注册此通道的选择器 -
ops
- 结果密钥的兴趣集 -
att
- 结果密钥的附件;可以为null
- 返回:
- 表示此通道向给定选择器注册的密钥
- 抛出:
-
ClosedSelectorException
- 如果选择器已关闭 -
IllegalBlockingModeException
- 如果此通道处于阻塞模式 -
IllegalSelectorException
- 如果此通道不是由与给定选择器相同的提供程序创建的 -
CancelledKeyException
- 如果此通道当前已向给定选择器注册,但相应的密钥已被取消 -
IllegalArgumentException
- 如果ops
集中的位不对应于此通道支持的操作,即如果set & ~validOps() != 0
-
ClosedChannelException
- 如果此通道已关闭
-
implCloseChannel
关闭此通道。此方法在
close
方法中指定,在implCloseSelectableChannel
方法中执行实际的关闭工作。然后取消所有此通道的密钥。- 指定者:
-
implCloseChannel
在类AbstractInterruptibleChannel
中 - 抛出:
-
IOException
- 如果关闭通道时发生 I/O 错误
-
implCloseSelectableChannel
关闭此可选择通道。此方法由
close
方法调用,以执行关闭通道的实际工作。仅当通道尚未关闭时才会调用此方法,而且永远不会多次调用。此方法的实现必须安排任何在此通道上阻塞在 I/O 操作中的其他线程立即返回,可以通过抛出异常或正常返回来实现。
- 抛出:
-
IOException
- 如果发生 I/O 错误
-
isBlocking
public final boolean isBlocking()从类中复制的描述:SelectableChannel
告知此通道上的每个 I/O 操作是否会阻塞直到完成。新创建的通道始终处于阻塞模式。如果此通道已关闭,则此方法返回的值未指定。
- 指定者:
-
isBlocking
在类SelectableChannel
中 - 返回:
-
true
如果且仅如果此通道处于阻塞模式
-
blockingLock
从类中复制的描述:SelectableChannel
检索configureBlocking
和register
方法同步的对象。这在需要在短时间内保持特定阻塞模式的适配器的实现中通常很有用。- 指定者:
-
blockingLock
在类SelectableChannel
- 返回:
- 阻塞模式锁对象
-
configureBlocking
调整此通道的阻塞模式。如果给定的阻塞模式与当前阻塞模式不同,则此方法将调用
implConfigureBlocking
方法,同时保持适当的锁,以更改模式。- 指定者:
-
configureBlocking
在类SelectableChannel
- 参数:
-
block
- 如果为true
,则此通道将被置于阻塞模式;如果为false
,则将置于非阻塞模式 - 返回:
- 此可选择通道
- 抛出:
-
ClosedChannelException
- 如果此通道已关闭 -
IOException
- 如果发生I/O错误
-
implConfigureBlocking
调整此通道的阻塞模式。此方法由
configureBlocking
方法调用,以执行更改阻塞模式的实际工作。仅当新模式与当前模式不同时才会调用此方法。- 参数:
-
block
- 如果为true
,则此通道将被置于阻塞模式;如果为false
,则将置于非阻塞模式 - 抛出:
-
IOException
- 如果发生I/O错误
-