public abstract class SelectorProvider
extends Object
java.lang.Object | |
↳ | java.nio.channels.spi.SelectorProvider |
选择器和可选频道的服务提供者类。
选择器提供者是该类的具体子类,它具有零参数构造函数并实现下面指定的抽象方法。 给定的Java虚拟机调用维护一个系统范围的默认提供程序实例,该实例由provider
方法返回。 该方法的第一次调用将按照以下指定的方式找到默认提供程序。
全系统默认提供由静态open种方法使用DatagramChannel
, Pipe
, Selector
, ServerSocketChannel
,并SocketChannel
类。 它也被System.inheritedChannel()
方法使用。 程序可以通过实例化该提供程序,然后直接调用此类中定义的方法来使用默认提供程序以外的提供程序。
该类中的所有方法都可以安全地用于多个并发线程。
Protected constructors |
|
---|---|
SelectorProvider() 初始化此类的新实例。 |
Public methods |
|
---|---|
Channel |
inheritedChannel() 返回从创建此Java虚拟机的实体继承的通道。 |
abstract DatagramChannel |
openDatagramChannel(ProtocolFamily family) 打开数据报通道。 |
abstract DatagramChannel |
openDatagramChannel() 打开数据报通道。 |
abstract Pipe |
openPipe() 打开管道。 |
abstract AbstractSelector |
openSelector() 打开选择器。 |
abstract ServerSocketChannel |
openServerSocketChannel() 打开服务器套接字通道。 |
abstract SocketChannel |
openSocketChannel() 打开套接字通道。 |
static SelectorProvider |
provider() 返回此次调用Java虚拟机的系统范围默认选择器提供程序。 |
Inherited methods |
|
---|---|
From class java.lang.Object
|
SelectorProvider ()
初始化此类的新实例。
Throws | |
---|---|
SecurityException |
If a security manager has been installed and it denies RuntimePermission ("selectorProvider") |
Channel inheritedChannel ()
返回从创建此Java虚拟机的实体继承的通道。
在许多操作系统上,可以启动进程(如Java虚拟机)的方式允许进程从创建进程的实体继承通道。 这样做的方式取决于系统,信道可能连接到的可能实体也是如此。 例如,在UNIX系统上,当请求到达关联的网络端口时,Internet服务守护进程( inetd )用于启动程序来为请求提供服务。 在这个例子中,启动的进程继承了一个代表网络套接字的通道。
在继承通道表示网络套接字的情况下,由此方法返回的 Channel
类型按以下方式确定:
如果继承的频道表示面向流的连接套接字,则返回SocketChannel
。 套接字通道至少在开始时处于阻塞模式,绑定到套接字地址并连接到对等端。
如果继承的通道表示面向流的侦听套接字,则返回ServerSocketChannel
。 服务器套接字通道至少在最初处于阻塞模式,并绑定到套接字地址。
如果继承的通道是面向数据报的套接字,则返回DatagramChannel
。 数据报通道至少在最初处于阻塞模式,并绑定到套接字地址。
除了描述的面向网络的频道之外,这种方法可能会在未来返回其他种类的频道。
此方法的第一次调用将创建返回的通道。 此方法的后续调用返回相同的通道。
Returns | |
---|---|
Channel |
The inherited channel, if any, otherwise null. |
Throws | |
---|---|
IOException |
If an I/O error occurs |
SecurityException |
If a security manager has been installed and it denies RuntimePermission ("inheritedChannel") |
DatagramChannel openDatagramChannel (ProtocolFamily family)
打开数据报通道。
Parameters | |
---|---|
family |
ProtocolFamily : The protocol family |
Returns | |
---|---|
DatagramChannel |
A new datagram channel |
Throws | |
---|---|
UnsupportedOperationException |
If the specified protocol family is not supported |
IOException |
If an I/O error occurs |
DatagramChannel openDatagramChannel ()
打开数据报通道。
Returns | |
---|---|
DatagramChannel |
The new channel |
Throws | |
---|---|
IOException |
Pipe openPipe ()
Opens a pipe.
Returns | |
---|---|
Pipe |
The new pipe |
Throws | |
---|---|
IOException |
AbstractSelector openSelector ()
打开选择器。
Returns | |
---|---|
AbstractSelector |
The new selector |
Throws | |
---|---|
IOException |
ServerSocketChannel openServerSocketChannel ()
打开服务器套接字通道。
Returns | |
---|---|
ServerSocketChannel |
The new channel |
Throws | |
---|---|
IOException |
SocketChannel openSocketChannel ()
Opens a socket channel.
Returns | |
---|---|
SocketChannel |
The new channel |
Throws | |
---|---|
IOException |
SelectorProvider provider ()
返回此次调用Java虚拟机的系统范围默认选择器提供程序。
这个方法的第一次调用定位默认提供者对象,如下所示:
如果定义了系统属性java.nio.channels.spi.SelectorProvider ,那么它将被视为具体提供者类的完全限定名称。 该类被加载并实例化; 如果此过程失败,则会引发未指定的错误。
如果提供程序类已安装在系统类加载程序可见的jar文件中,并且该jar文件包含资源目录META-INF/services中名为java.nio.channels.spi.SelectorProvider的提供程序配置文件,则会在该文件中指定第一个类名称。 该类被加载并实例化; 如果此过程失败,则会引发未指定的错误。
最后,如果没有提供者被任何上述方法指定,那么系统默认的提供者类将被实例化并返回结果。
此方法的后续调用返回第一次调用返回的提供程序。
Returns | |
---|---|
SelectorProvider |
The system-wide default selector provider |