Пакет java.nio.channels
| Каналы | Описание |
|---|---|
Channel | Центр для операций ввода-вывода |
ReadableByteChannel
| Может читать в буфер |
ScatteringByteChannel
| Может читать в последовательность буферов |
WritableByteChannel
| Может записывать из буфера |
GatheringByteChannel
| Может записывать из последовательности буферов |
ByteChannel
| Может читать/записывать в/из буфера |
SeekableByteChannel
| A 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.
- Since:
- 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 | Токен, представляющий членство в группе многоадресной рассылки Интернет-протокола (IP). |
| MulticastChannel | Сеть канал, поддерживающий многоадресную рассылку Интернет-протокола (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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/nio/channels/package-summary.html