Пакет java.nio.channels
Определяет каналы, представляющие подключения к сущностям, способным выполнять операции ввода-вывода, такие как файлы и сокеты; определяет селекторы для операций ввода-вывода с множественной выборкой и без блокировки.
См.: Описание
| Интерфейс | Описание |
|---|---|
| AsynchronousByteChannel | Асинхронный канал, который может читать и записывать байты. |
| AsynchronousChannel | Канал, поддерживающий асинхронные операции ввода-вывода. |
| ByteChannel | Канал, который может читать и записывать байты. |
| Channel | Центр для операций ввода-вывода. |
| CompletionHandler<V,A> | Обработчик для потребления результата асинхронной операции ввода-вывода. |
| GatheringByteChannel | Канал, который может записывать байты из последовательности буферов. |
| InterruptibleChannel | Канал, который может быть асинхронно закрыт и прерван. |
| MulticastChannel | Сеть канала, поддерживающая многоадресную рассылку по протоколу IP. |
| NetworkChannel | Канал к сетевому сокету. |
| ReadableByteChannel | Канал, который может читать байты. |
| ScatteringByteChannel | Канал, который может читать байты в последовательность буферов. |
| SeekableByteChannel | Канал байтов, который поддерживает текущую позицию и позволяет изменить её. |
| WritableByteChannel | Канал, который может записывать байты. |
| Класс | Описание |
|---|---|
| AsynchronousChannelGroup | Группа асинхронных каналов для совместного использования ресурсов. |
| AsynchronousFileChannel | Асинхронный канал для чтения, записи и манипулирования файлом. |
| AsynchronousServerSocketChannel | Асинхронный канал для сокетов прослушивания потокового типа. |
| AsynchronousSocketChannel | Асинхронный канал для сокетов подключения потокового типа. |
| Channels | Утилитарные методы для каналов и потоков. |
| DatagramChannel | Выбираемый канал для сокетов дейтаграмм. |
| FileChannel | Канал для чтения, записи, отображения и манипулирования файлом. |
| FileChannel.MapMode | Безопасная перечисление режимов отображения файлов. |
| FileLock | Токен, представляющий блокировку региона файла. |
| MembershipKey | Токен, представляющий членство в группе многоадресной рассылки по протоколу IP. |
| Pipe | Пара каналов, которая реализует однонаправленную трубу. |
| Pipe.SinkChannel | Канал, представляющий выход для записи в |
| Pipe.SourceChannel | Канал, представляющий вход для чтения из |
| SelectableChannel | Канал, который может быть выбран с помощью |
| SelectionKey | Токен, представляющий регистрацию |
| Selector | Мультиплексор объектов |
| ServerSocketChannel | Выбираемый канал для сокетов прослушивания потокового типа. |
| SocketChannel | Выбираемый канал для сокетов подключения потокового типа. |
| Исключение | Описание |
|---|---|
| AcceptPendingException | Исключение без проверки типа, выбрасываемое, когда попытка начать операцию accept на канале, и предыдущая операция accept еще не завершена. |
| AlreadyBoundException | Исключение без проверки типа, выбрасываемое, когда производится попытка привязать сокет к сетевому ориентированному каналу, который уже привязан. |
| AlreadyConnectedException | Исключение без проверки типа, выбрасываемое, когда производится попытка подключить |
| AsynchronousCloseException | Исключение с проверкой типа, полученное потоком, когда другой поток закрывает канал или часть канала, в которой он заблокирован в операции ввода-вывода. |
| CancelledKeyException | Исключение без проверки типа, выбрасываемое, когда производится попытка использовать ключ выбора, который больше недействителен. |
| ClosedByInterruptException | Исключение с проверкой типа, полученное потоком, когда другой поток прерывает его, в то время как он заблокирован в операции ввода-вывода на канале. |
| ClosedChannelException | Исключение с проверкой типа, выбрасываемое, когда производится попытка вызвать или завершить операцию ввода-вывода на канале, который закрыт или, по крайней мере, закрыт для этой операции. |
| ClosedSelectorException | Исключение без проверки типа, выбрасываемое, когда производится попытка вызвать операцию ввода-вывода на закрытом селекторе. |
| ConnectionPendingException | Исключение без проверки типа, выбрасываемое, когда производится попытка подключить |
| FileLockInterruptionException | Исключение с проверкой типа, полученное потоком, когда другой поток прерывает его, в то время как он ожидает получить блокировку файла. |
| IllegalBlockingModeException | Исключение без проверки типа, выбрасываемое, когда операция, зависящая от режима блокировки, вызывается на канале в неверном режиме блокировки. |
| IllegalChannelGroupException | Исключение без проверки типа, выбрасываемое, когда производится попытка открыть канал в группе, которая не была создана тем же поставщиком. |
| IllegalSelectorException | Исключение без проверки типа, выбрасываемое, когда производится попытка зарегистрировать канал с селектором, который не был создан поставщиком, который создал канал. |
| InterruptedByTimeoutException | Исключение с проверкой типа, полученное потоком, когда истекает срок ожидания, прежде чем асинхронная операция завершится. |
| NoConnectionPendingException | Исключение без проверки типа, выбрасываемое, когда метод |
| NonReadableChannelException | Исключение без проверки типа, выбрасываемое, когда производится попытка чтения из канала, который изначально не был открыт для чтения. |
| NonWritableChannelException | Исключение без проверки типа, выбрасываемое, когда производится попытка записи в канал, который изначально не был открыт для записи. |
| NotYetBoundException | Исключение без проверки типа, выбрасываемое, когда производится попытка вызвать операцию ввода-вывода на канале серверного сокета, который еще не привязан. |
| NotYetConnectedException | Исключение без проверки типа, выбрасываемое, когда производится попытка вызвать операцию ввода-вывода на канале сокета, который еще не подключен. |
| OverlappingFileLockException | Исключение без проверки типа, выбрасываемое, когда производится попытка получить блокировку региона файла, который перекрывается регионом, уже заблокированным той же виртуальной машиной Java, или когда другой поток уже ожидает заблокировать перекрывающийся регион того же файла. |
| ReadPendingException | Исключение без проверки типа, выбрасываемое, когда производится попытка чтения из асинхронного канала сокета, и предыдущее чтение еще не завершено. |
| ShutdownChannelGroupException | Исключение без проверки типа, выбрасываемое, когда производится попытка создать канал в группе, которая закрыта, или обработчик завершения операции ввода-вывода не может быть вызван, потому что группа каналов завершена. |
| UnresolvedAddressException | Исключение без проверки типа, выбрасываемое, когда производится попытка вызвать сетевую операцию на неопределённый адрес сокета. |
| UnsupportedAddressTypeException | Исключение без проверки типа, выбрасываемое, когда производится попытка привязать или подключиться к адресу сокета типа, который не поддерживается. |
| WritePendingException | Исключение без проверки типа, выбрасываемое, когда производится попытка записи в асинхронный канал сокета, и предыдущая запись еще не завершена. |
Описание пакета java.nio.channels
Определяет каналы, представляющие подключения к сущностям, способным выполнять операции ввода-вывода, такие как файлы и сокеты; определяет селекторы для многопоточных, неблокирующих операций ввода-вывода.
| Каналы | Описание |
|---|---|
| Центр для операций ввода-вывода |
| Может читать в буфер |
| Может читать в последовательность буферов |
| Может записывать из буфера |
| Может записывать из последовательности буферов |
| Может читать/записывать в/из буфера |
| ByteChannel подключённый к сущности, содержащей последовательность байтов переменной длины |
| Поддерживает асинхронные операции ввода-вывода. |
| Может асинхронно читать и записывать байты |
| Канал к сетевому сокету |
| Может присоединяться к группам интернет-мультивещания (IP-мультивещания) |
| Утилитарные методы для взаимодействия каналов/потоков |
Канал представляет открытое соединение с сущностью, такой как аппаратное устройство, файл, сетевой сокет или компонент программы, способный выполнять одну или несколько различных операций ввода-вывода, например, чтение или запись. Как указано в интерфейсе 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.ioInputStream или OutputStream, и наоборот, InputStream или OutputStream может быть создан из канала. Можно создать Reader, использующий заданную кодировку для декодирования байтов из заданного канала считывания байтов, и наоборот, можно создать Writer, использующий заданную кодировку для кодирования символов в байты и записи их в заданный канал записи байтов.
| Каналы файлов | Описание |
|---|---|
| Чтение, запись, отображение и управление файлами |
| Блокировка файла (или области файла) |
| Прямой буфер байтов, сопоставленный с областью файла |
Класс FileChannel поддерживает обычные операции чтения байтов из и записи байтов в канал, подключённый к файлу, а также операции запроса и изменения текущей позиции файла и обрезки файла до определённого размера. Он определяет методы для получения блокировок всего файла или определённой области файла; эти методы возвращают экземпляры класса FileLock. Наконец, он определяет методы для принудительной записи обновлений файла на устройство хранения, содержащее его, для эффективного переноса байтов между файлом и другими каналами и для отображения области файла напрямую в памяти.
Создаётся FileChannel путём вызова одного из его статических методов open или вызова метода getChannel класса FileInputStream, FileOutputStream или RandomAccessFile для возврата канала файла, подключённого к тому же основному файлу, что и класс . java.io
| Мультиплексированные, неблокирующие операции ввода-вывода | Описание |
|---|---|
| Канал, который может быть мультиплексирован |
| Канал к сокету с ориентированным на датаграммы протоколом |
| Конечная точка записи канала в трубе |
| Конечная точка чтения канала в трубе |
| Канал к сокету прослушивания с ориентированным на поток протоколом |
| Канал для сокета подключения с ориентированным на поток протоколом |
| Мультиплексор выбираемых каналов |
| Токен, представляющий регистрацию канала в селекторе |
| Два канала, образующих однонаправленную трубу |
Многопоточные, неблокирующие операции ввода-вывода, которые значительно масштабируемы по сравнению с ориентированными на поток, блокирующими операциями ввода-вывода, обеспечиваются селекторами, выбираемыми каналами и ключами выбора.
Селектор — это мультиплексор выбираемых каналов, которые, в свою очередь, являются особым типом канала, который можно поместить в неблокирующий режим. Для выполнения многопоточных операций ввода-вывода сначала создаётся один или несколько выбираемых каналов, они помещаются в неблокирующий режим и registered с селектором. Регистрация канала определяет набор операций ввода-вывода, которые будут проверяться селектором на готовность, и возвращает ключ выбора, который представляет регистрацию.
После того, как некоторые каналы были зарегистрированы в селекторе, можно выполнить операцию выбора, чтобы узнать, какие каналы, если таковые имеются, стали готовы выполнить одну или несколько операций, в отношении которых ранее была объявлена заинтересованность. Если канал готов, то ключ, возвращённый при его регистрации, будет добавлен в набор выбранных ключей селектора. Набор ключей и ключи в нём можно просмотреть, чтобы определить операции, для которых каждый канал готов. Из каждого ключа можно получить соответствующий канал, чтобы выполнить необходимые операции ввода-вывода.
То, что ключ выбора указывает на готовность канала к выполнению какой-либо операции, является подсказкой, а не гарантией, что такую операцию может выполнить поток без блокировки. Крайне важно, чтобы код, выполняющий многопоточные операции ввода-вывода, был написан так, чтобы игнорировать эти подсказки, когда они оказываются неверными.
Этот пакет определяет классы выбираемых каналов, соответствующие классам DatagramSocket, ServerSocket и Socket, определённым в пакете . Были внесены незначительные изменения в эти классы для поддержки сокетов, связанных с каналами. В этом пакете также определён простой класс, реализующий однонаправленные трубы. Во всех случаях новый выбираемый канал создаётся путём вызова статического метода java.netopen соответствующего класса. Если каналу требуется связанный сокет, сокет будет создан в результате этой операции.
Реализацию селекторов, выбираемых каналов и ключей выбора можно заменить, «подключив» альтернативное определение или экземпляр класса SelectorProvider, определённого в пакете . Не ожидается, что многие разработчики будут использовать эту возможность; она предоставлена в основном для того, чтобы продвинутые пользователи могли воспользоваться механизмами многопоточного ввода-вывода, специфичными для операционной системы, когда требуется очень высокая производительность. java.nio.channels.spi
Большая часть учёта и синхронизации, необходимых для реализации абстракций многоканального ввода/вывода, выполняется классами AbstractInterruptibleChannel, AbstractSelectableChannel, AbstractSelectionKey и AbstractSelector в пакете . При определении пользовательского поставщика селекторов следует наследоваться только от классов java.nio.channels.spiAbstractSelector и AbstractSelectionKey; пользовательские классы каналов должны расширять соответствующие подклассы SelectableChannel, определённые в этом пакете.
| Асинхронный ввод/вывод | Описание |
|---|---|
| Асинхронный канал для чтения, записи и манипулирования файлом |
| Асинхронный канал для сокета с потоковым соединением |
| Асинхронный канал для сокета с потоковым прослушиванием |
| Обработчик для потребления результата асинхронной операции |
| Группа асинхронных каналов для совместного использования ресурсов |
Asynchronous channels — это особый тип канала, способный к асинхронным операциям ввода/вывода. Асинхронные каналы неблокирующие и определяют методы для инициирования асинхронных операций, возвращая Future, представляющий ожидаемый результат каждой операции. Future может использоваться для опроса или ожидания результата операции. Асинхронные операции ввода/вывода также могут указать CompletionHandler для вызова при завершении операции. Обработчик завершения — это предоставляемый пользователем код, который выполняется для потребления результата операции ввода/вывода.
Этот пакет определяет классы асинхронных каналов, которые подключены к сокету с потоковым соединением или прослушиванием, или к сокету с дейтаграммой. Он также определяет класс AsynchronousFileChannel для асинхронного чтения, записи и манипулирования файлом. Как и FileChannel, он поддерживает операции обрезки файла до определенного размера, принудительной записи обновлений файла на устройство хранения или получения блокировок на весь файл или на определённый фрагмент файла. В отличие от FileChannel, он не определяет методов для прямого отображения фрагмента файла в память. Если требуется работа с памятью, то можно использовать FileChannel.
Асинхронные каналы привязаны к группе асинхронных каналов для совместного использования ресурсов. Группа имеет связанный ExecutorService, в который отправляются задачи для обработки событий ввода/вывода и диспетчеризации обработчиков завершения, которые потребляют результат асинхронных операций, выполненных на каналах в группе. Группу можно указать при создании канала, или канал можно привязать к группе по умолчанию. Искушённые пользователи могут создать собственные группы асинхронных каналов или настроить ExecutorService, которая будет использоваться для группы по умолчанию.
Как и в случае с селекторами, реализацию асинхронных каналов можно заменить, подключив альтернативное определение или экземпляр класса AsynchronousChannelProvider, определённого в пакете . Не ожидается, что многие разработчики будут активно использовать эту возможность; она предоставляется в первую очередь для того, чтобы искушённые пользователи могли воспользоваться механизмами асинхронного ввода/вывода, специфичными для операционной системы, когда требуется очень высокая производительность.java.nio.channels.spi
Если не указано иное, передача аргумента null в конструктор или метод любого класса или интерфейса в этом пакете приведёт к сбрасыванию исключения NullPointerException.
- С тех пор:
- 1.4
© 1993, 2020, 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.