Пакет 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 соответствующего класса. Если каналу требуется связанный сокет, сокет будет создан в качестве побочного эффекта этой операции.
Реализация селекторов, выбираемых каналов и ключей выбора может быть заменена альтернативным определением или экземпляром класса 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
| Интерфейс | Описание |
|---|---|
| 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 | Исключение, которое выбрасывается при попытке записи в асинхронный канал сокета, если предыдущая запись ещё не завершена. |
© 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.
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/nio/channels/package-summary.html