Класс SelectorProvider
public abstract class SelectorProvider extends Object
Провайдер селектора — это конкретный подкласс этого класса, имеющий конструктор без аргументов и реализующий перечисленные ниже абстрактные методы. В данном вызове виртуальной машины Java существует единственный системный провайдер по умолчанию, который возвращается методом provider. Первый вызов этого метода найдёт провайдера по умолчанию, как указано ниже.
Системный провайдер по умолчанию используется статическими методами open классов DatagramChannel, Pipe, Selector, ServerSocketChannel и SocketChannel. Он также используется методом System.inheritedChannel(). Программа может использовать провайдер, отличный от провайдера по умолчанию, создав экземпляр этого провайдера и затем напрямую вызвав методы open , определённые в этом классе.
Все методы в этом классе безопасны для использования в нескольких потоках одновременно.
- Since:
- 1.4
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
protected |
Инициализирует новый экземпляр этого класса. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
Channel |
inheritedChannel() |
Возвращает канал, унаследованный от сущности, создавшей эту виртуальную машину Java. |
abstract DatagramChannel |
openDatagramChannel() |
Открывает канал дейтаграммы. |
abstract DatagramChannel |
openDatagramChannel |
Открывает канал дейтаграммы. |
abstract Pipe |
openPipe() |
Открывает канал-трубу. |
abstract AbstractSelector |
openSelector() |
Открывает селектор. |
abstract ServerSocketChannel |
openServerSocketChannel() |
Открывает канал сокета-сервера. |
ServerSocketChannel |
openServerSocketChannel |
Открывает канал сокета-сервера. |
abstract SocketChannel |
openSocketChannel() |
Открывает сокет-канал. |
SocketChannel |
openSocketChannel |
Открывает сокет-канал. |
static SelectorProvider |
provider() |
Возвращает системный провайдер селектора по умолчанию для данного вызова виртуальной машины Java. |
Подробное описание конструкторов
SelectorProvider
protected SelectorProvider()
- Исключения:
-
SecurityException- Если установлен менеджер безопасности и он запрещаетRuntimePermission("selectorProvider")
Подробное описание методов
provider
public static SelectorProvider provider()
Первый вызов этого метода находит объект провайдера по умолчанию следующим образом:
Если системная переменная
java.nio.channels.spi.SelectorProviderопределена, то она считается полным именем класса конкретного провайдера. Класс загружается и инициализируется; если этот процесс завершается неудачно, выбрасывается неопределённое исключение.Если класс провайдера был установлен в JAR-файле, видимом для системного загрузчика классов, и этот JAR-файл содержит файл конфигурации провайдера с именем
java.nio.channels.spi.SelectorProviderв каталоге ресурсовMETA-INF/services, то первым именем класса, указанным в этом файле, будет являться возвращаемый класс. Класс загружается и инициализируется; если этот процесс завершается неудачно, выбрасывается неопределённое исключение.Наконец, если никакой провайдер не был указан ни одним из вышеперечисленных способов, то системный провайдер по умолчанию инициализируется, и результат возвращается.
Последующие вызовы этого метода возвращают провайдера, который был возвращён при первом вызове.
- Возвращает:
- Системный провайдер селекторов по умолчанию
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, может быть запущен так, что процесс может унаследовать канал от сущности, создавшей этот процесс. Способ выполнения этого зависит от операционной системы, как и возможные сущности, к которым может быть подключён канал. Например, на системах UNIX используется демон интернет-служб (inetd) для запуска программ для обработки запросов, когда запрос поступает на ассоциированный сетевой порт. В этом примере процесс, который запускается, наследует канал, представляющий сетевой сокет.
В случаях, когда унаследованный канал предназначен для сокета протокола Интернета, тип Channel, возвращаемый этим методом, определяется следующим образом:
Если унаследованный канал предназначен для потокового подключенного сокета, то возвращается
SocketChannel. Канал сокета, по крайней мере, первоначально, находится в режиме блокировки, привязан к адресу сокета и подключен к узлу.Если унаследованный канал предназначен для потокового сокета прослушивания, то возвращается
ServerSocketChannel. Серверный сокет-канал, по крайней мере, первоначально, находится в режиме блокировки и привязан к адресу сокета.Если унаследованный канал представляет собой сокет, ориентированный на дейтаграммы, то возвращается
DatagramChannel. Канал дейтаграмм, по крайней мере, первоначально, находится в режиме блокировки и привязан к адресу сокета.
В случаях, когда унаследованный канал предназначен для сокета доменной системы Unix, тип Channel, возвращаемый, такой же, как для сокетов протокола Интернета, описанных выше, за исключением того, что сокеты, ориентированные на дейтаграммы, не поддерживаются.
В дополнение к двум типам сокетов, описанных выше, этот метод может возвращать другие типы в будущем.
Первый вызов этого метода создаёт канал, который возвращается. Последующие вызовы этого метода возвращают тот же самый канал.
- Требования к реализации:
- По умолчанию этот метод возвращает
null. - Возвращает:
- Унаследованный канал, если таковой есть, в противном случае
null. - Исключения:
-
IOException- Если произошла ошибка ввода-вывода -
SecurityException- Если установлен менеджер безопасности и он запрещаетRuntimePermission("inheritedChannel") - С:
- 1.5
openSocketChannel
public SocketChannel openSocketChannel(ProtocolFamily family) throws IOException
- Требования к реализации:
- По умолчанию этот метод сначала проверяет, что заданный протокол
familyнеnull, а затем выбрасываетUnsupportedOperationException. - Параметры:
-
family- Семейство протоколов - Возвращает:
- Новый канал
- Исключения:
-
UnsupportedOperationException- Если указанное семейство протоколов не поддерживается -
IOException- Если произошла ошибка ввода-вывода - С:
- 15
openServerSocketChannel
public ServerSocketChannel openServerSocketChannel(ProtocolFamily family) throws IOException
- Требования к реализации:
- По умолчанию этот метод сначала проверяет, что заданный протокол
familyнеnull, а затем выбрасываетUnsupportedOperationException. - Параметры:
-
family- Семейство протоколов - Возвращает:
- Новый канал
- Исключения:
-
UnsupportedOperationException- Если указанное семейство протоколов не поддерживается -
IOException- Если произошла ошибка ввода-вывода - С:
- 15
© 1993, 2023, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/nio/channels/spi/SelectorProvider.html