Пакет 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. Наконец, он определяет методы для принудительной записи обновлений файла в устройство хранения, которое его содержит, для эффективного обмена данными между файлом и другими каналами и для отображения области файла непосредственно в память.
A 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, 2021, 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/17/docs/api/java.base/java/nio/channels/package-summary.html