java.nio.channels.spi

java.lang.Object
  继承者 java.nio.channels.spi.AbstractInterruptibleChannel
      继承者 java.nio.channels.SelectableChannel
          继承者 java.nio.channels.spi.AbstractSelectableChannel
所有已实现的接口:
Closeable, Channel, InterruptibleChannel
直接已知子类:
DatagramChannel, Pipe.SinkChannel, Pipe.SourceChannel, ServerSocketChannel, SocketChannel

public abstract class AbstractSelectableChannel
     
extends SelectableChannel

可选择通道的基本实现类。

此类定义了处理通道注册、注销和关闭机制的各种方法。它会维持此通道的当前阻塞模式及其当前的选择键集。它执行实现 SelectableChannel 规范所需的所有同步。此类中所定义的抽象保护方法的实现不必与同一操作中使用的其他线程同步。

从以下版本开始:
1.4

构造方法摘要
protected AbstractSelectableChannel(SelectorProvider provider)
          初始化此类的一个新实例。
 
方法摘要
 Object blockingLock()
          获取其 configureBlockingregister 方法实现同步的对象。
 SelectableChannel configureBlocking(boolean block)
          调整此通道的阻塞模式。
protected  void implCloseChannel()
          关闭此通道。
protected abstract  void implCloseSelectableChannel()
          关闭此可选择通道。
protected abstract  void implConfigureBlocking(boolean block)
          调整此通道的阻塞模式。
 boolean isBlocking()
          判断此通道上的每个 I/O 操作在完成前是否被阻塞。
 boolean isRegistered()
          判断此通道当前是否已向任何选择器注册。
 SelectionKey keyFor(Selector sel)
          获取表示通道向给定选择器注册的键。
 SelectorProvider provider()
          返回创建此通道的提供者。
 SelectionKey register(Selector sel, int ops, Object att)
          向给定的选择器注册此通道,返回一个选择键。
 
从类 java.nio.channels.SelectableChannel 继承的方法
register, validOps
 
从类 java.nio.channels.spi.AbstractInterruptibleChannel 继承的方法
begin, close, end, isOpen
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
从接口 java.nio.channels.Channel 继承的方法
close, isOpen
 

构造方法详细信息

AbstractSelectableChannel

protected AbstractSelectableChannel(SelectorProvider provider)
初始化此类的一个新实例。

方法详细信息

provider

public final SelectorProvider provider()
返回创建此通道的提供者。

指定者:
SelectableChannel 中的 provider
返回:
创建此通道的提供者

isRegistered

public final boolean isRegistered()
从类 SelectableChannel 复制的描述
判断此通道当前是否已向任何选择器注册。新创建的通道总是未注册的。

由于键取消和通道注销之间固有的延迟,所以在已取消某个通道的所有键后,该通道可能在一定时间内还会保持已注册状态。关闭通道后,该通道可能在一定时间内还会保持已注册状态。

指定者:
SelectableChannel 中的 isRegistered
返回:
当且仅当此通道为已注册时才返回 true

keyFor

public final SelectionKey keyFor(Selector sel)
从类 SelectableChannel 复制的描述
获取表示通道向给定选择器注册的键。

指定者:
SelectableChannel 中的 keyFor
返回:
当此通道是向给定选择器注册的最后一个通道时返回该键,如果此通道当前未向该选择器注册,则返回 null

register

public final SelectionKey register(Selector sel,
                                   int ops,
                                   Object att)
                            throws ClosedChannelException
向给定的选择器注册此通道,返回一个选择键。

此方法首先验证此通道是否已打开,以及给定的初始相关操作集是否有效。

如果已向给定的选择器注册了此通道,则在将其相关操作集设置为给定值后,返回表示该注册的选择键。

如果尚未向给定的选择器注册此通道,则在保持适当锁定的同时调用选择器的 register 方法。返回前将得到的键添加到此通道的键集中。

指定者:
SelectableChannel 中的 register
参数:
sel - 要向其注册此通道的选择器
ops - 所得键的可用操作集
att - 所得键的附件,可能为 null
返回:
表示此通道向给定选择器注册的键
抛出:
ClosedChannelException - 如果此通道已关闭

implCloseChannel

protected final void implCloseChannel()
                               throws IOException
关闭此通道。

此方法在 AbstractInterruptibleChannel 类中指定并且由 close 方法调用,为了实际关闭此通道,此方法依次调用 implCloseSelectableChannel 方法。然后取消此通道的所有键。

指定者:
AbstractInterruptibleChannel 中的 implCloseChannel
抛出:
IOException - 如果关闭通道的同时发生 I/O 错误

implCloseSelectableChannel

protected abstract void implCloseSelectableChannel()
                                            throws IOException
关闭此可选择通道。

为了实际关闭此通道,由 close 方法调用此方法。仅在此通道尚未关闭时才能调用此方法,并且只能调用一次。

此方法的实现必须安排阻塞于此通道上 I/O 操作中的所有其他线程立即返回,要么抛出异常,要么正常返回。

抛出:
IOException

isBlocking

public final boolean isBlocking()
从类 SelectableChannel 复制的描述
判断此通道上的每个 I/O 操作在完成前是否被阻塞。新创建的通道总是处于阻塞模式。

如果此通道已关闭,则此方法返回的值是未指定的。

指定者:
SelectableChannel 中的 isBlocking
返回:
当且仅当此通道处于阻塞模式时才返回 true

blockingLock

public final Object blockingLock()
从类 SelectableChannel 复制的描述
获取其 configureBlockingregister 方法实现同步的对象。在要求在短时间内维持特定阻塞模式的适配器实现中,这通常是很有用的。

指定者:
SelectableChannel 中的 blockingLock
返回:
阻塞模式锁定对象

configureBlocking

public final SelectableChannel configureBlocking(boolean block)
                                          throws IOException
调整此通道的阻塞模式。

如果给定的阻塞模式与当前的阻塞模式不同,那么为了改变该模式,此方法调用 implConfigureBlocking 方法,同时保持适当的锁定。

指定者:
SelectableChannel 中的 configureBlocking
参数:
block - 如果为 true,则此通道将被置于阻塞模式;如果为 false,则此通道将被置于非阻塞模式
返回:
此可选择通道
抛出:
ClosedChannelException - 如果此通道已关闭
IOException - 如果发生 I/O 错误

implConfigureBlocking

protected abstract void implConfigureBlocking(boolean block)
                                       throws IOException
调整此通道的阻塞模式。

为了执行实际的更改阻塞模式的工作,由 configureBlocking 方法调用此方法。仅在新模式与当前模式不同时才调用此方法。

抛出:
IOException - 如果发生 I/O 错误