Spec-Zone.ru › OpenJDK 25

Пакет java.nio.channels

package java.nio.channels
Определяет каналы, представляющие соединения с объектами, способными выполнять операции ввода-вывода, такими как файлы и сокеты; определяет селекторы для мультиплексированных неблокирующих операций ввода-вывода.
Lists channels and their descriptions
Каналы Описание
Channel Узел для операций ввода-вывода
ReadableByteChannel Может читать данные в буфер
ScatteringByteChannel Может читать данные в последовательность буферов
WritableByteChannel Может записывать данные из буфера
GatheringByteChannel Может записывать данные из последовательности буферов
ByteChannel Может читать данные из буфера и записывать данные в буфер
SeekableByteChannel ByteChannel, связанный с объектом, содержащим последовательность байтов переменной длины
AsynchronousChannel Поддерживает асинхронные операции ввода-вывода.
AsynchronousByteChannel Может асинхронно читать и записывать байты
NetworkChannel Канал для сетевого сокета
MulticastChannel Может присоединяться к группам многоадресной рассылки по протоколу Интернета (IP)
Channels Вспомогательные методы для взаимодействия каналов и потоков

Канал представляет собой открытое соединение с таким объектом, как аппаратное устройство, файл, сетевой сокет или программный компонент, способный выполнять одну или несколько различных операций ввода-вывода, например чтение или запись. Как указано в интерфейсе Channel, каналы могут быть открытыми или закрытыми; кроме того, они являются асинхронно закрываемыми и прерываемыми.

Интерфейс Channel расширяется несколькими другими интерфейсами.

Интерфейс ReadableByteChannel определяет метод read, который считывает байты из канала в буфер; аналогичным образом интерфейс WritableByteChannel определяет метод write, который записывает байты из буфера в канал. Интерфейс ByteChannel объединяет эти два интерфейса для распространенного случая каналов, которые могут как читать, так и записывать байты. Интерфейс SeekableByteChannel расширяет интерфейс ByteChannel методами для получения (query) и установки (modify) текущей позиции канала, а также для получения его size.

Интерфейсы ScatteringByteChannel и GatheringByteChannel расширяют соответственно интерфейсы ReadableByteChannel и WritableByteChannel, добавляя методы read и write, принимающие последовательность буферов вместо одного буфера.

Интерфейс NetworkChannel определяет методы для привязки сокета канала (bind), получения адреса, к которому привязан сокет, а также методы для получения (get) и установки (set) параметров сокета. Интерфейс MulticastChannel определяет методы для присоединения к группам многоадресной рассылки по протоколу Интернета (IP).

Вспомогательный класс Channels определяет статические методы, обеспечивающие взаимодействие классов потоков из пакета java.io с классами каналов этого пакета. Подходящий канал можно создать на основе InputStream или OutputStream; и наоборот, на основе канала можно создать InputStream или OutputStream. Можно создать Reader, который использует заданную кодировку для декодирования байтов из заданного читаемого байтового канала; и наоборот, можно создать Writer, который использует заданную кодировку для преобразования символов в байты и их записи в заданный записываемый байтовый канал.

Lists file channels and their descriptions
Файловые каналы Описание
FileChannel Читает, записывает, отображает и обрабатывает файлы
FileLock Блокировка файла или его области
MappedByteBuffer Прямой байтовый буфер, отображенный на область файла

Класс FileChannel поддерживает стандартные операции чтения байтов из канала, связанного с файлом, и записи байтов в него, а также запрос и изменение текущей позиции в файле и усечение файла до заданного размера. Он определяет методы для получения блокировок всего файла или его определенной области; эти методы возвращают экземпляры класса FileLock. Кроме того, он определяет методы для принудительной записи обновлений файла на устройство хранения, для эффективной передачи байтов между файлом и другими каналами, а также для прямого отображения области файла в память.

Объект FileChannel создается вызовом одного из его статических методов open или метода getChannel класса FileInputStream, FileOutputStream или RandomAccessFile, чтобы получить файловый канал, связанный с тем же базовым файлом, что и класс java.io.

Lists multiplexed, non-blocking channels and their descriptions
Мультиплексированный неблокирующий ввод-вывод Описание
SelectableChannel Канал, который можно мультиплексировать
DatagramChannel Канал для сокета, ориентированного на дейтаграммы
Pipe.SinkChannel Пишущий конец канала
Pipe.SourceChannel Читающий конец канала
ServerSocketChannel Канал для прослушивающего сокета, ориентированного на потоки
SocketChannel Канал для подключающегося сокета, ориентированного на потоки
Selector Мультиплексор выбираемых каналов
SelectionKey Токен, представляющий регистрацию канала в селекторе
Pipe Два канала, образующие однонаправленный канал

Мультиплексированный неблокирующий ввод-вывод, обладающий значительно лучшей масштабируемостью, чем поточный блокирующий ввод-вывод, обеспечивается селекторами, выбираемыми каналами и ключами выбора.

Селектор представляет собой мультиплексор выбираемых каналов, которые, в свою очередь, являются особым типом каналов, допускающим переход в неблокирующий режим. Для выполнения операций мультиплексированного ввода-вывода сначала создается один или несколько выбираемых каналов, которые переводятся в неблокирующий режим, а затем registered в селекторе. При регистрации канала указывается набор операций ввода-вывода, готовность к выполнению которых будет проверяться селектором; возвращается ключ выбора, представляющий эту регистрацию.

После регистрации каналов в селекторе можно выполнить операцию выбора, чтобы определить, какие каналы, если таковые есть, готовы выполнить одну или несколько операций, ранее указанных в качестве интересующих. Если канал готов, ключ, возвращенный при его регистрации, добавляется в набор выбранных ключей селектора. Набор ключей и содержащиеся в нем ключи можно проверить, чтобы определить, к каким операциям готов каждый канал. По каждому ключу можно получить соответствующий канал и выполнить необходимые операции ввода-вывода.

Указание ключом выбора на готовность канала к некоторой операции является подсказкой, но не гарантией того, что поток сможет выполнить такую операцию без блокировки. Код, выполняющий мультиплексированный ввод-вывод, необходимо писать так, чтобы он игнорировал эти подсказки, если они оказываются неверными.

В этом пакете определены классы выбираемых каналов, соответствующие классам DatagramSocket, ServerSocket и Socket, определенным в пакете java.net. В эти классы внесены небольшие изменения для поддержки сокетов, связанных с каналами. В этом пакете также определен простой класс, реализующий однонаправленные каналы. Во всех случаях новый выбираемый канал создается вызовом статического метода open соответствующего класса. Если каналу требуется связанный сокет, он будет создан в качестве побочного эффекта этой операции.

DatagramChannel, SocketChannel и ServerSocketChannel можно создавать с различными protocol families. Стандартные типы семейств определены в StandardProtocolFamily.

Каналы для сокетов Интернет-протокола создаются с использованием семейств протоколов INET или INET6. Сокеты Интернет-протокола поддерживают сетевой обмен данными с использованием TCP и UDP и адресуются с помощью объектов InetSocketAddress, инкапсулирующих IP-адрес и номер порта. Сокеты Интернет-протокола также создаются по умолчанию, если семейство протоколов не указано в методе создания канала.

Каналы для сокетов домена Unix создаются с использованием семейства протоколов UNIX. Сокеты домена Unix поддерживают локальный межпроцессный обмен данными на одном и том же узле и адресуются с помощью объектов UnixDomainSocketAddress, инкапсулирующих путь в файловой системе локальной системы.

Реализацию селекторов, выбираемых каналов и ключей выбора можно заменить, «подключив» альтернативное определение класса SelectorProvider или его экземпляр, определенный в пакете java.nio.channels.spi. Предполагается, что этой возможностью воспользуется немного разработчиков; она предназначена главным образом для опытных пользователей, которым необходимо задействовать специфичные для операционной системы механизмы мультиплексирования ввода-вывода для достижения очень высокой производительности.

Значительная часть учета состояния и синхронизации, необходимых для реализации абстракций мультиплексированного ввода-вывода, выполняется классами AbstractInterruptibleChannel, AbstractSelectableChannel, AbstractSelectionKey и AbstractSelector из пакета java.nio.channels.spi. При создании пользовательского поставщика селекторов напрямую следует наследовать только классы AbstractSelector и AbstractSelectionKey; пользовательские классы каналов должны расширять соответствующие подклассы SelectableChannel, определенные в этом пакете.

Lists asynchronous channels and their descriptions
Асинхронный ввод-вывод Описание
AsynchronousFileChannel Асинхронный канал для чтения, записи и обработки файла
AsynchronousSocketChannel Асинхронный канал для подключающегося сокета, ориентированного на потоки
AsynchronousServerSocketChannel Асинхронный канал для прослушивающего сокета, ориентированного на потоки
CompletionHandler Обработчик для получения результата асинхронной операции
AsynchronousChannelGroup Группа асинхронных каналов для совместного использования ресурсов

Asynchronous channels — это особый тип каналов, способных выполнять асинхронные операции ввода-вывода. Асинхронные каналы являются неблокирующими и определяют методы для запуска асинхронных операций, возвращающие Future, представляющий ожидающий результат каждой операции. Объект Future можно использовать для опроса или ожидания результата операции. Для асинхронных операций ввода-вывода также можно указать CompletionHandler, который будет вызван по завершении операции. Обработчик завершения — это предоставленный пользователем код, выполняемый для получения результата операции ввода-вывода.

В этом пакете определены классы асинхронных каналов, связанных с подключающимся или прослушивающим сокетом, ориентированным на потоки, либо с сокетом, ориентированным на дейтаграммы. Здесь также определен класс AsynchronousFileChannel для асинхронного чтения, записи и обработки файла. Как и FileChannel, он поддерживает операции усечения файла до заданного размера, принудительной записи обновлений файла на устройство хранения, а также получения блокировок всего файла или его определенной области. В отличие от FileChannel, он не определяет методы для прямого отображения области файла в память. Если требуется отображенный в память ввод-вывод, можно использовать FileChannel.

Асинхронные каналы связываются с группой асинхронных каналов для совместного использования ресурсов. С группе сопоставлен объект ExecutorService, которому отправляются задачи для обработки событий ввода-вывода и вызова обработчиков завершения, получающих результаты асинхронных операций, выполненных каналами этой группы. При создании канала группу можно указать явно или связать канал с группой по умолчанию. Опытные пользователи могут создать собственные группы асинхронных каналов или настроить ExecutorService, используемый для группы по умолчанию.

Как и в случае с селекторами, реализацию асинхронных каналов можно заменить, «подключив» альтернативное определение класса AsynchronousChannelProvider или его экземпляр, определенный в пакете java.nio.channels.spi. Предполагается, что этой возможностью воспользуется немного разработчиков; она предназначена главным образом для опытных пользователей, которым необходимо задействовать специфичные для операционной системы механизмы асинхронного ввода-вывода для достижения очень высокой производительности.

Если не указано иное, передача аргумента null конструктору или методу любого класса или интерфейса в этом пакете приводит к выбрасыванию исключения NullPointerException.

Начиная с:
1.4
Пакет Описание
java.nio
Определяет буферы — контейнеры для данных — и содержит обзор других пакетов NIO.
java.nio.channels.spi
Классы поставщиков служб для пакета java.nio.channels.
java.nio.charset
Определяет наборы символов, декодеры и кодировщики для преобразования байтов в символы Unicode и обратно.
java.nio.file
Определяет интерфейсы и классы, позволяющие виртуальной машине Java обращаться к файлам, атрибутам файлов и файловым системам.
Класс Описание
AcceptPendingException
Непроверяемое исключение, возникающее при попытке начать операцию accept для канала, если предыдущая операция accept еще не завершена.
AlreadyBoundException
Непроверяемое исключение, возникающее при попытке привязать сокет сетевого канала, который уже привязан.
AlreadyConnectedException
Непроверяемое исключение, возникающее при попытке подключить SocketChannel, который уже подключен.
AsynchronousByteChannel
Асинхронный канал, который может читать и записывать байты.
AsynchronousChannel
Канал, поддерживающий асинхронные операции ввода-вывода.
AsynchronousChannelGroup
Группа асинхронных каналов для совместного использования ресурсов.
AsynchronousCloseException
Проверяемое исключение, получаемое потоком, когда другой поток закрывает канал или его часть, на которой он заблокирован во время операции ввода-вывода.
AsynchronousFileChannel
Асинхронный канал для чтения, записи и обработки файла.
AsynchronousServerSocketChannel
Асинхронный канал для прослушивания потоковых сокетов.
AsynchronousSocketChannel
Асинхронный канал для подключения потоковых сокетов.
ByteChannel
Канал, который может читать и записывать байты.
CancelledKeyException
Непроверяемое исключение, возникающее при попытке использовать ключ выбора, который больше не действителен.
Channel
Узел для операций ввода-вывода.
Channels
Вспомогательные методы для каналов и потоков.
ClosedByInterruptException
Проверяемое исключение, получаемое потоком, когда другой поток прерывает его во время блокировки при операции ввода-вывода с каналом.
ClosedChannelException
Проверяемое исключение, возникающее при попытке вызвать или завершить операцию ввода-вывода для канала, который закрыт или закрыт для этой операции.
ClosedSelectorException
Непроверяемое исключение, возникающее при попытке выполнить операцию ввода-вывода с закрытым селектором.
CompletionHandler<V,A>
Обработчик для получения результата асинхронной операции ввода-вывода.
ConnectionPendingException
Непроверяемое исключение, возникающее при попытке подключить SocketChannel, для которого уже выполняется неблокирующая операция подключения.
DatagramChannel
Канал с возможностью выбора для сокетов, ориентированных на дейтаграммы.
FileChannel
Канал для чтения, записи, отображения и обработки файла.
FileChannel.MapMode
Режим отображения файла.
FileLock
Маркер, представляющий блокировку области файла.
FileLockInterruptionException
Проверяемое исключение, получаемое потоком, когда другой поток прерывает его во время ожидания блокировки файла.
GatheringByteChannel
Канал, который может записывать байты из последовательности буферов.
IllegalBlockingModeException
Непроверяемое исключение, возникающее при вызове операции, требующей определенного режима блокировки, для канала в неверном режиме блокировки.
IllegalChannelGroupException
Непроверяемое исключение, возникающее при попытке открыть канал в группе, созданной другим поставщиком.
IllegalSelectorException
Непроверяемое исключение, возникающее при попытке зарегистрировать канал в селекторе, созданном не тем поставщиком, который создал канал.
InterruptedByTimeoutException
Проверяемое исключение, получаемое потоком, если время ожидания истекает до завершения асинхронной операции.
InterruptibleChannel
Канал, который можно асинхронно закрыть и прервать.
MembershipKey
Маркер, представляющий членство в группе многоадресной рассылки Internet Protocol (IP).
MulticastChannel
Сетевой канал, поддерживающий многоадресную рассылку Internet Protocol (IP).
NetworkChannel
Канал сетевого сокета.
NoConnectionPendingException
Непроверяемое исключение, возникающее при вызове метода finishConnect объекта SocketChannel без предварительного успешного вызова его метода connect.
NonReadableChannelException
Непроверяемое исключение, возникающее при попытке чтения из канала, изначально открытого не для чтения.
NonWritableChannelException
Непроверяемое исключение, возникающее при попытке записи в канал, изначально открытый не для записи.
NotYetBoundException
Непроверяемое исключение, возникающее при попытке выполнить операцию ввода-вывода с каналом серверного сокета, который еще не привязан.
NotYetConnectedException
Непроверяемое исключение, возникающее при попытке выполнить операцию ввода-вывода с каналом сокета, который еще не подключен.
OverlappingFileLockException
Непроверяемое исключение, возникающее при попытке заблокировать область файла, пересекающуюся с областью, уже заблокированной той же виртуальной машиной Java, или если другой поток уже ожидает блокировки пересекающейся области того же файла.
Pipe
Пара каналов, реализующая однонаправленный канал.
Pipe.SinkChannel
Канал, представляющий записываемый конец Pipe.
Pipe.SourceChannel
Канал, представляющий читаемый конец Pipe.
ReadableByteChannel
Канал, который может читать байты.
ReadPendingException
Непроверяемое исключение, возникающее при попытке чтения из асинхронного канала сокета, если предыдущее чтение еще не завершено.
ScatteringByteChannel
Канал, который может считывать байты в последовательность буферов.
SeekableByteChannel
Байтовый канал, который хранит текущую позицию и позволяет ее изменять.
SelectableChannel
Канал, который можно мультиплексировать с помощью Selector.
SelectionKey
Маркер, представляющий регистрацию SelectableChannel в Selector.
Selector
Мультиплексор объектов SelectableChannel.
ServerSocketChannel
Канал с возможностью выбора для прослушивания потоковых сокетов.
ShutdownChannelGroupException
Непроверяемое исключение, возникающее при попытке создать канал в остановленной группе или если обработчик завершения операции ввода-вывода невозможно вызвать, поскольку группа каналов завершила работу.
SocketChannel
Канал с возможностью выбора для подключения потоковых сокетов.
UnresolvedAddressException
Непроверяемое исключение, возникающее при попытке выполнить сетевую операцию с неразрешенным адресом сокета.
UnsupportedAddressTypeException
Непроверяемое исключение, возникающее при попытке привязать или подключиться к адресу сокета неподдерживаемого типа.
WritableByteChannel
Канал, который может записывать байты.
WritePendingException
Непроверяемое исключение, возникающее при попытке записи в асинхронный канал сокета, если предыдущая запись еще не завершена.

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, концептуальные обзоры, определения терминов, способы обхода проблем и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторские права © 1993, 2025, Oracle и/или ее аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 1993, 2025, 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/25/docs/api/java.base/java/nio/channels/package-summary.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API