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