モジュール java.base
パッケージ java.nio.channels.spi

クラスSelectorProvider

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

public abstract class SelectorProvider extends Object
セレクタおよび選択可能チャネルのサービス・プロバイダ・クラスです。

セレクタ・プロバイダは、ゼロ引数コンストラクタを持ち、次の抽象メソッドを実装する、このクラスの具象サブクラスです。 指定されたJava仮想マシン呼出しは、providerメソッドによって返される、システム全体で単一のデフォルト・プロバイダ・インスタンスを保持します。 このメソッドの最初の呼出しは、次のデフォルト・プロバイダを検出します。

システム全体のデフォルト・プロバイダは、DatagramChannelPipeSelectorServerSocketChannel、および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. 最後に、上記の手段で指定されたプロバイダが存在しない場合は、システムのデフォルト・プロバイダ・クラスのインスタンスが作成され、結果が返されます。

      次回以降の呼出しでも、1回目の呼出し時に返されたプロバイダが返されます。

      戻り値:
      システム全体のデフォルト・セレクタ・プロバイダ
    • openDatagramChannel

      public abstract DatagramChannel openDatagramChannel() throws IOException
      データグラム・チャネルをオープンします。
      戻り値:
      新しいチャネル
      例外:
      IOException - 入出力エラーが発生した場合
    • openDatagramChannel

      public abstract DatagramChannel openDatagramChannel(ProtocolFamily family) throws IOException
      データグラム・チャネルをオープンします。
      パラメータ:
      family - プロトコル・ファミリ
      戻り値:
      新しいデータグラム・チャネル
      例外:
      UnsupportedOperationException - 指定されたプロトコル・ファミリがサポートされていない場合
      IOException - 入出力エラーが発生した場合
      導入されたバージョン:
      1.7
    • openPipe

      public abstract Pipe openPipe() throws IOException
      パイプをオープンします。
      戻り値:
      新しいパイプ
      例外:
      IOException - 入出力エラーが発生した場合
    • openSelector

      public abstract AbstractSelector openSelector() throws IOException
      セレクタをオープンします。
      戻り値:
      新しいセレクタ
      例外:
      IOException - 入出力エラーが発生した場合
    • openServerSocketChannel

      public abstract ServerSocketChannel openServerSocketChannel() throws IOException
      サーバー・ソケット・チャネルをオープンします。
      戻り値:
      新しいチャネル
      例外:
      IOException - 入出力エラーが発生した場合
    • openSocketChannel

      public abstract SocketChannel openSocketChannel() throws IOException
      ソケット・チャネルをオープンします。
      戻り値:
      新しいチャネル
      例外:
      IOException - 入出力エラーが発生した場合
    • inheritedChannel

      public Channel inheritedChannel() throws IOException
      Java仮想マシンを作成したエンティティから継承されたチャネルを返します。

      Java仮想マシンなど、多くのオペレーティング・システムのプロセスを起動する際に、そのプロセスを作成したエンティティからチャネルを継承させることができます。 ただし、その方法はシステムに依存します。チャネルの接続先として使用可能なエンティティについても同様です。 たとえば、UNIXシステムの場合、ある関連ネットワーク・ポート上で要求が受信されると、インターネット・サービス・デーモン(inetd)経由でその要求を処理するプログラムが起動されます。 この例の場合、起動されたプロセスは、ネットワーク・ソケットを表すチャネルを継承します。

      継承されたチャネルが「インターネット・プロトコル」ソケット用の場合、このメソッドによって返されるChannel型は次のように決定されます:

      • 継承されたチャネルがストリーム指向の接続ソケット用の場合は、SocketChannelが返されます。 ソケット・チャネルは、少なくとも最初はブロック・モードであり、特定のソケット・アドレスにバインドされており、特定のピアに接続されています。

      • 継承されたチャネルがストリーム指向のリスニング・ソケット用の場合は、ServerSocketChannelが返されます。 サーバー・ソケット・チャネルは、少なくとも最初はブロック・モードであり、特定のソケット・アドレスにバインドされています。

      • 継承されたチャネルがデータグラム指向のソケットを表現している場合、DatagramChannelが返されます。 データグラム・チャネルは、少なくとも最初はブロック・モードであり、特定のソケット・アドレスにバインドされています。

      継承されたチャネルが「Unixドメイン」ソケット用である場合、返されるChannelタイプは、データグラム指向ソケットがサポートされていないことを除き、前述の「インターネット・プロトコル」ソケットの場合と同じです。

      前述の2タイプのソケットに加えて、このメソッドは将来的にほかの型を返す可能性があります。

      このメソッドの初回呼出し時には、チャネルが作成され、それが返されます。 このメソッドの後続呼出し時には、その同じチャネルが返されます。

      実装要件:
      このメソッドのデフォルト実装はnullを返します。
      戻り値:
      継承されたチャネル(存在する場合)。それ以外の場合はnull
      例外:
      IOException - 入出力エラーが発生した場合
      SecurityException - セキュリティ・マネージャがインストールされており、それがRuntimePermission("inheritedChannel")を拒否した場合
      導入されたバージョン:
      1.5
    • openSocketChannel

      public SocketChannel openSocketChannel(ProtocolFamily family) throws IOException
      ソケット・チャネルをオープンします。
      実装要件:
      このメソッドのデフォルト実装では、最初に指定されたプロトコルfamilynullでないことを確認してから、UnsupportedOperationExceptionをスローします。
      パラメータ:
      family - プロトコル・ファミリ
      戻り値:
      新しいチャネル
      例外:
      UnsupportedOperationException - 指定されたプロトコル・ファミリがサポートされていない場合
      IOException - 入出力エラーが発生した場合
      導入されたバージョン:
      15
    • openServerSocketChannel

      public ServerSocketChannel openServerSocketChannel(ProtocolFamily family) throws IOException
      サーバー・ソケット・チャネルをオープンします。
      実装要件:
      このメソッドのデフォルト実装では、最初に指定されたプロトコルfamilynullでないことを確認してから、UnsupportedOperationExceptionをスローします。
      パラメータ:
      family - プロトコル・ファミリ
      戻り値:
      新しいチャネル
      例外:
      UnsupportedOperationException - 指定されたプロトコル・ファミリがサポートされていない場合
      IOException - 入出力エラーが発生した場合
      導入されたバージョン:
      15