public abstract class SelectorProvider extends Object
选择器提供程序是该类的具体子类,它具有零参数构造函数,并实现下面指定的抽象方法。 给定的Java虚拟机的调用将维护一个系统范围内默认的提供者实例,该实例由provider
方法返回。 该方法的首次调用将定位如下所述的默认提供程序。
全系统默认提供由静态open种方法使用DatagramChannel
, Pipe
, Selector
, ServerSocketChannel
和SocketChannel
类。 它也被System.inheritedChannel()
使用。 程序可以通过实例化该提供程序,然后直接调用此类中定义的open方法,使用除默认提供程序之外的提供者。
此类中的所有方法都可以安全地被多个并发线程使用。
Modifier | Constructor and Description |
---|---|
protected |
SelectorProvider()
初始化此类的新实例。
|
Modifier and Type | Method and Description |
---|---|
Channel |
inheritedChannel()
返回从创建此Java虚拟机的实体继承的通道。
|
abstract DatagramChannel |
openDatagramChannel()
打开数据报通道。
|
abstract DatagramChannel |
openDatagramChannel(ProtocolFamily family)
打开数据报通道。
|
abstract Pipe |
openPipe()
打开管道。
|
abstract AbstractSelector |
openSelector()
打开选择器。
|
abstract ServerSocketChannel |
openServerSocketChannel()
打开服务器插槽通道。
|
abstract SocketChannel |
openSocketChannel()
打开套接字通道。
|
static SelectorProvider |
provider()
返回用于Java虚拟机的此调用的系统级默认选择器提供程序。
|
protected SelectorProvider()
SecurityException
- 如果已安装安全管理员,并且拒绝RuntimePermission
("selectorProvider")
public static SelectorProvider provider()
此方法的第一次调用将定位默认提供程序对象,如下所示:
如果定义了系统属性java.nio.channels.spi.SelectorProvider ,则将其视为具体提供程序类的完全限定名称。 该类被加载和实例化; 如果此过程失败,则抛出未指定的错误。
如果提供程序类已安装在系统类加载程序可见的jar文件中,并且该jar文件在资源目录META-INF/services中包含名为java.nio.channels.spi.SelectorProvider的提供程序配置文件, 则将在该文件中指定第一个类名。 该类被加载和实例化; 如果此过程失败,则抛出未指定的错误。
最后,如果没有通过上述任何一种方式指定提供程序,那么系统默认提供程序类将被实例化,并返回结果。
此方法的后续调用返回由第一次调用返回的提供程序。
public abstract DatagramChannel openDatagramChannel() throws IOException
IOException
- 如果发生I / O错误
public abstract DatagramChannel openDatagramChannel(ProtocolFamily family) throws IOException
family
- 协议族
UnsupportedOperationException
- 如果不支持指定的协议族
IOException
- 如果发生I / O错误
public abstract Pipe openPipe() throws IOException
IOException
- 如果发生I / O错误
public abstract AbstractSelector openSelector() throws IOException
IOException
- 如果发生I / O错误
public abstract ServerSocketChannel openServerSocketChannel() throws IOException
IOException
- 如果发生I / O错误
public abstract SocketChannel openSocketChannel() throws IOException
IOException
- 如果发生I / O错误
public Channel inheritedChannel() throws IOException
在许多操作系统上,可以以允许进程从创建该进程的实体继承一个通道的方式启动诸如Java虚拟机的进程。 这样做的方式是系统依赖的,通道可能连接到的可能实体也是如此。 例如,在UNIX系统上,当请求到达相关联的网络端口时,Internet服务守护程序( inetd )用于启动程序来服务请求。 在此示例中,启动的进程继承代表网络套接字的通道。
在继承的通道表示网络套接字的情况下,此方法返回的Channel
类型的确定如下:
如果继承的通道代表一个面向流的连接套接字,则返回一个SocketChannel
。 套接字通道至少最初处于阻塞模式,绑定到套接字地址,并连接到对等体。
如果继承的通道代表一个面向流的侦听套接字,则返回一个ServerSocketChannel
。 服务器套接字通道至少最初处于阻塞模式,并绑定到套接字地址。
如果继承的通道是面向数据包的套接字,则返回一个DatagramChannel
。 数据报信道至少最初处于阻塞模式,并绑定到套接字地址。
除了描述的面向网络的渠道之外,这种方法可能会在将来返回其他类型的频道。
此方法的第一次调用将创建返回的通道。 此方法的后续调用返回相同的通道。
IOException
- 如果发生I / O错误
SecurityException
- 如果安全管理器已经安装,并且它拒绝RuntimePermission
("inheritedChannel")