Module java.base

Class SelectorProvider

java.lang.Object
java.nio.channels.spi.SelectorProvider

public abstract class SelectorProvider extends Object
选择器和可选择通道的服务提供程序类。

选择器提供程序是这个类的具体子类,具有零参数构造函数并实现下面指定的抽象方法。Java虚拟机的给定调用维护一个单一的系统范围默认提供程序实例,该实例由provider方法返回。该方法的第一次调用将按照下面指定的方式定位默认提供程序。

系统范围的默认提供程序由DatagramChannelPipeSelectorServerSocketChannelSocketChannel类的静态open方法使用。它还被System.inheritedChannel()方法使用。程序可以通过实例化该提供程序然后直接调用该类中定义的open方法来使用除默认提供程序之外的提供程序。

该类中的所有方法都可以安全地被多个并发线程使用。

自从:
1.4
  • Constructor Details

    • SelectorProvider

      protected SelectorProvider()
      初始化此类的新实例。
      抛出:
      SecurityException - 如果已安装安全管理器并且拒绝RuntimePermission("selectorProvider")
  • Method Details

    • provider

      public static SelectorProvider provider()
      返回此Java虚拟机调用的系统范围默认选择器提供程序。

      此方法的第一次调用将按照以下方式定位默认提供程序对象:

      1. 如果系统属性java.nio.channels.spi.SelectorProvider已定义,则将其视为具体提供程序类的完全限定名称。加载并实例化该类;如果此过程失败,则抛出未指定的错误。

      2. 如果已在对系统类加载器可见的jar文件中安装了提供程序类,并且该jar文件包含名为java.nio.channels.spi.SelectorProvider的提供程序配置文件,位于资源目录META-INF/services中,则将采用该文件中指定的第一个类名。加载并实例化该类;如果此过程失败,则抛出未指定的错误。

      3. 最后,如果没有通过上述任何方式指定提供程序,则实例化系统默认提供程序类并返回结果。

      此方法的后续调用将返回第一次调用返回的提供程序。

      返回:
      系统范围的默认选择器提供程序
    • openDatagramChannel

      public abstract DatagramChannel openDatagramChannel() throws IOException
      打开数据报通道。
      返回:
      新通道
      抛出:
      IOException - 如果发生I/O错误
    • openDatagramChannel

      public abstract DatagramChannel openDatagramChannel(ProtocolFamily family) throws IOException
      打开数据报通道。
      参数:
      family - 协议族
      返回:
      新数据报通道
      抛出:
      UnsupportedOperationException - 如果不支持指定的协议族
      IOException - 如果发生I/O错误
      自从:
      1.7
    • openPipe

      public abstract Pipe openPipe() throws IOException
      打开管道。
      返回:
      新管道
      抛出:
      IOException - 如果发生I/O错误
    • openSelector

      public abstract AbstractSelector openSelector() throws IOException
      打开选择器。
      返回:
      新选择器
      抛出:
      IOException - 如果发生I/O错误
    • openServerSocketChannel

      public abstract ServerSocketChannel openServerSocketChannel() throws IOException
      打开服务器套接字通道。
      返回:
      新通道
      抛出:
      IOException - 如果发生I/O错误
    • openSocketChannel

      public abstract SocketChannel openSocketChannel() throws IOException
      打开套接字通道。
      返回:
      新通道
      抛出:
      IOException - 如果发生I/O错误
    • inheritedChannel

      public Channel inheritedChannel() throws IOException
      返回从创建此Java虚拟机的实体继承的通道。

      在许多操作系统上,可以以允许进程继承来自创建进程的实体的通道的方式启动进程,例如Java虚拟机。这样做的方式是系统相关的,通道可能连接到的实体也是系统相关的。例如,在UNIX系统上,Internet服务守护程序(inetd)用于在相关联的网络端口上到达请求时启动服务请求的程序。在这个例子中,启动的进程继承代表网络套接字的通道。

      在继承的通道是用于Internet协议套接字的情况下,此方法返回的Channel类型如下确定:

      • 如果继承的通道是用于流式连接套接字,则返回一个SocketChannel。套接字通道至少在初始时处于阻塞模式,绑定到套接字地址,并连接到对等方。

      • 如果继承的通道是用于流式监听套接字,则返回一个ServerSocketChannel。服务器套接字通道至少在初始时处于阻塞模式,并绑定到套接字地址。

      • 如果继承的通道是用于数据报导向套接字,则返回一个DatagramChannel。数据报通道至少在初始时处于阻塞模式,并绑定到套接字地址。

      在继承的通道是用于Unix域套接字的情况下,返回的Channel类型与上述Internet协议套接字相同,只是不支持数据报导向套接字。

      除了刚才描述的两种套接字类型外,此方法将来可能返回其他类型。

      此方法的第一次调用创建并返回通道。后续调用此方法将返回相同的通道。

      实现要求:
      此方法的默认实现返回null
      返回:
      继承的通道,如果有的话,否则null
      抛出:
      IOException - 如果发生I/O错误
      SecurityException - 如果已安装安全管理器并且拒绝RuntimePermission("inheritedChannel")
      自从:
      1.5
    • openSocketChannel

      public SocketChannel openSocketChannel(ProtocolFamily family) throws IOException
      打开套接字通道。
      实现要求:
      此方法的默认实现首先检查给定的协议family不是null,然后抛出UnsupportedOperationException
      参数:
      family - 协议族
      返回:
      新通道
      抛出:
      UnsupportedOperationException - 如果不支持指定的协议族
      IOException - 如果发生I/O错误
      自从:
      15
    • openServerSocketChannel

      public ServerSocketChannel openServerSocketChannel(ProtocolFamily family) throws IOException
      打开服务器套接字通道。
      实现要求:
      此方法的默认实现首先检查给定的协议family不是null,然后抛出UnsupportedOperationException
      参数:
      family - 协议族
      返回:
      新通道
      抛出:
      UnsupportedOperationException - 如果不支持指定的协议族
      IOException - 如果发生I/O错误
      自从:
      15