Пакет 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.
- 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, 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/package-summary.html