Пакет java.nio.channels
| Каналы | Описание |
|---|---|
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, который использует заданную кодировку для преобразования символов в байты и их записи в заданный записываемый байтовый канал.
| Файловые каналы | Описание |
|---|---|
FileChannel
| Читает, записывает, отображает и обрабатывает файлы |
FileLock
| Блокировка файла или его области |
MappedByteBuffer
| Прямой байтовый буфер, отображенный на область файла |
Класс FileChannel поддерживает стандартные операции чтения байтов из канала, связанного с файлом, и записи байтов в него, а также запрос и изменение текущей позиции в файле и усечение файла до заданного размера. Он определяет методы для получения блокировок всего файла или его определенной области; эти методы возвращают экземпляры класса FileLock. Кроме того, он определяет методы для принудительной записи обновлений файла на устройство хранения, для эффективной передачи байтов между файлом и другими каналами, а также для прямого отображения области файла в память.
Объект FileChannel создается вызовом одного из его статических методов open или метода
getChannel класса FileInputStream, FileOutputStream или RandomAccessFile, чтобы получить файловый канал, связанный с тем же базовым файлом, что и класс java.io.
| Мультиплексированный неблокирующий ввод-вывод | Описание |
|---|---|
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, определенные в этом пакете.
| Асинхронный ввод-вывод | Описание |
|---|---|
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
| Класс | Описание |
|---|---|
| AcceptPendingException | Непроверяемое исключение, возникающее при попытке начать операцию accept для канала, если предыдущая операция accept еще не завершена. |
| AlreadyBoundException | Непроверяемое исключение, возникающее при попытке привязать сокет сетевого канала, который уже привязан. |
| AlreadyConnectedException | Непроверяемое исключение, возникающее при попытке подключить SocketChannel, который уже подключен. |
| AsynchronousByteChannel | Асинхронный канал, который может читать и записывать байты. |
| AsynchronousChannel | Канал, поддерживающий асинхронные операции ввода-вывода. |
| AsynchronousChannelGroup | Группа асинхронных каналов для совместного использования ресурсов. |
| AsynchronousCloseException | Проверяемое исключение, получаемое потоком, когда другой поток закрывает канал или его часть, на которой он заблокирован во время операции ввода-вывода. |
| AsynchronousFileChannel | Асинхронный канал для чтения, записи и обработки файла. |
| AsynchronousServerSocketChannel | Асинхронный канал для прослушивания потоковых сокетов. |
| AsynchronousSocketChannel | Асинхронный канал для подключения потоковых сокетов. |
| ByteChannel | Канал, который может читать и записывать байты. |
| CancelledKeyException | Непроверяемое исключение, возникающее при попытке использовать ключ выбора, который больше не действителен. |
| Channel | Узел для операций ввода-вывода. |
| Channels | Вспомогательные методы для каналов и потоков. |
| ClosedByInterruptException | Проверяемое исключение, получаемое потоком, когда другой поток прерывает его во время блокировки при операции ввода-вывода с каналом. |
| ClosedChannelException | Проверяемое исключение, возникающее при попытке вызвать или завершить операцию ввода-вывода для канала, который закрыт или закрыт для этой операции. |
| ClosedSelectorException | Непроверяемое исключение, возникающее при попытке выполнить операцию ввода-вывода с закрытым селектором. |
|
CompletionHandler<V, |
Обработчик для получения результата асинхронной операции ввода-вывода. |
| 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 | Непроверяемое исключение, возникающее при попытке записи в асинхронный канал сокета, если предыдущая запись еще не завершена. |
© 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