模块 java.base

类 SelectorProvider

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

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

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

DatagramChannel Pipe Selector ServerSocketChannel SocketChannel 类的静态 open 方法使用系统范围的默认提供程序。它也被 System.inheritedChannel() 方法使用。程序可以通过实例化该提供程序然后直接调用此类中定义的open方法来使用默认提供程序以外的提供程序。

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

自从:
1.4
  • 构造方法详细信息

    • SelectorProvider

      protected SelectorProvider()
      初始化此类的新实例。
      抛出:
      SecurityException - 如果安装了安全管理器并且它拒绝 RuntimePermission ("selectorProvider")
  • 方法详情

    • provider

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

      此方法的第一次调用定位默认提供者对象,如下所示:

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

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

      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) 用于在请求到达关联的网络端口时启动程序以服务请求。在此示例中,启动的进程继承了表示网络套接字的通道。

      在继承通道用于互联网协议socket 那么这个方法返回的Channel 类型判断如下:

      • 如果继承的通道用于面向流的连接套接字,则返回 SocketChannel 。至少在最初,套接字通道处于阻塞模式,绑定到套接字地址,并连接到对等点。

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

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

      在继承通道用于Unix域socket 然后返回的 Channel 类型与 for 相同互联网协议如上所述的套接字,除了不支持面向数据报的套接字。

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

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

      实现要求:
      此方法的默认实现返回 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