选择器提供程序是此类的具体子类,它具有零参数构造函数并实现下面指定的抽象方法。 Java 虚拟机的给定调用维护一个系统范围的默认提供程序实例,该实例由 provider 方法返回。该方法的第一次调用将定位默认提供程序,如下所示。
DatagramChannel 、Pipe 、Selector 、ServerSocketChannel 和 SocketChannel 类的静态 open 方法使用系统范围的默认提供程序。它也被 System.inheritedChannel() 方法使用。程序可以通过实例化该提供程序然后直接调用此类中定义的open方法来使用默认提供程序以外的提供程序。
此类中的所有方法都可以安全地供多个并发线程使用。
- 自从:
- 1.4
-
构造方法总结
构造方法 -
方法总结
修饰符和类型方法描述返回从创建此 Java 虚拟机的实体继承的通道。abstract DatagramChannel打开数据报通道。abstract DatagramChannelopenDatagramChannel(ProtocolFamily family) 打开数据报通道。abstract PipeopenPipe()打开管道。abstract AbstractSelector打开一个选择器。abstract ServerSocketChannel打开服务套接字通道。打开服务套接字通道。abstract SocketChannel打开套接字通道。openSocketChannel(ProtocolFamily family) 打开套接字通道。static SelectorProviderprovider()返回此 Java 虚拟机调用的系统范围默认选择器提供程序。
-
构造方法详细信息
-
SelectorProvider
protected SelectorProvider()初始化此类的新实例。- 抛出:
SecurityException- 如果安装了安全管理器并且它拒绝RuntimePermission("selectorProvider")
-
-
方法详情
-
provider
返回此 Java 虚拟机调用的系统范围默认选择器提供程序。此方法的第一次调用定位默认提供者对象,如下所示:
如果定义了系统属性
java.nio.channels.spi.SelectorProvider,则它被视为具体提供程序类的完全限定名称。该类已加载并实例化;如果此过程失败,则会抛出未指定的错误。如果提供程序类已安装在系统类加载器可见的 jar 文件中,并且该 jar 文件在资源目录
META-INF/services中包含名为java.nio.channels.spi.SelectorProvider的提供程序配置文件,则采用该文件中指定的第一个类名。该类已加载并实例化;如果此过程失败,则会抛出未指定的错误。最后,如果没有通过上述任何方式指定提供者,则实例化系统默认提供者类并返回结果。
此方法的后续调用返回由第一次调用返回的提供程序。
- 返回:
- 系统范围的默认选择器提供者
-
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) 用于在请求到达关联的网络端口时启动程序以服务请求。在此示例中,启动的进程继承了表示网络套接字的通道。
在继承通道用于互联网协议socket 那么这个方法返回的
Channel类型判断如下:如果继承的通道用于面向流的连接套接字,则返回
SocketChannel。至少在最初,套接字通道处于阻塞模式,绑定到套接字地址,并连接到对等点。如果继承的通道用于面向流的监听套接字,则返回
ServerSocketChannel。服务套接字通道至少在最初处于阻塞模式,并绑定到套接字地址。如果继承的通道是面向数据报的套接字,则返回
DatagramChannel。至少在最初,数据报通道处于阻塞模式,并绑定到套接字地址。
在继承通道用于Unix域socket 然后返回的
Channel类型与 for 相同互联网协议如上所述的套接字,除了不支持面向数据报的套接字。除了刚刚描述的两种类型的套接字之外,该方法将来可能会返回其他类型。
第一次调用此方法会创建返回的通道。此方法的后续调用返回相同的通道。
- 实现要求:
-
此方法的默认实现返回
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
-