Spec-Zone.ru › OpenJDK 25

Интерфейс AsynchronousByteChannel

Все суперинтерфейсы:
AsynchronousChannel, AutoCloseable, Channel, Closeable
Все известные реализующие классы:
AsynchronousSocketChannel
public interface AsynchronousByteChannel extends AsynchronousChannel
Асинхронный канал, который может читать и записывать байты.

Некоторые каналы не допускают выполнения более одной операции чтения или записи одновременно. Если поток вызывает метод чтения до завершения предыдущей операции чтения, будет выброшено исключение ReadPendingException. Аналогично, если метод записи вызывается до завершения предыдущей операции записи, будет выброшено исключение WritePendingException. Возможность одновременного выполнения других видов операций ввода-вывода с операцией чтения зависит от типа канала.

Обратите внимание, что объекты ByteBuffers небезопасно использовать из нескольких параллельных потоков. При запуске операции чтения или записи необходимо следить за тем, чтобы буфер не использовался до завершения операции.

Начиная с:
1.7
См. также:
  • Channels.newInputStream(AsynchronousByteChannel)
  • Channels.newOutputStream(AsynchronousByteChannel)

Краткое описание методов

Модификатор и тип Метод Описание
Future<Integer> read(ByteBuffer dst)
Читает последовательность байтов из этого канала в указанный буфер.
<A> void read(ByteBuffer dst, A attachment, CompletionHandler<Integer, ? super A> handler)
Читает последовательность байтов из этого канала в указанный буфер.
Future<Integer> write(ByteBuffer src)
Записывает последовательность байтов из указанного буфера в этот канал.
<A> void write(ByteBuffer src, A attachment, CompletionHandler<Integer, ? super A> handler)
Записывает последовательность байтов из указанного буфера в этот канал.

Методы, объявленные в интерфейсе AsynchronousChannel

close

Методы, объявленные в интерфейсе Channel

isOpen

Подробное описание методов

read

<A> void read(ByteBuffer dst, A attachment, CompletionHandler<Integer, ? super A> handler)
Читает последовательность байтов из этого канала в указанный буфер.

Этот метод запускает асинхронную операцию чтения последовательности байтов из этого канала в указанный буфер. Параметр handler — это обработчик завершения, который вызывается по завершении (или при сбое) операции чтения. В обработчик завершения передаётся количество прочитанных байтов или -1, если не удалось прочитать ни одного байта, поскольку канал достиг конца потока.

Операция чтения может прочитать из канала до r байтов, где r — количество байтов, оставшихся в буфере, то есть dst.remaining() в момент начала чтения. Если r равно 0, операция чтения немедленно завершается с результатом 0, не запуская операцию ввода-вывода.

Предположим, что прочитана последовательность байтов длины n, где 0 < n <= r. Эта последовательность байтов будет перенесена в буфер так, что первый байт последовательности окажется по индексу p, а последний — по индексу p + n - 1, где p — позиция буфера в момент выполнения чтения. По завершении позиция буфера будет равна p + n; его предел не изменится.

Буферы небезопасно использовать из нескольких параллельных потоков, поэтому не следует обращаться к буферу до завершения операции.

Этот метод можно вызвать в любой момент. Некоторые типы каналов не допускают выполнения более одной операции чтения одновременно. Если поток запускает операцию чтения до завершения предыдущей операции чтения, будет выброшено исключение ReadPendingException.

Параметры типа:
A — тип прикрепляемого объекта
Параметры:
dst — буфер, в который будут перенесены байты
attachment — объект, прикрепляемый к операции ввода-вывода; может быть null
handler — обработчик завершения
Выбрасывает:
IllegalArgumentException — если буфер доступен только для чтения
ReadPendingException — если канал не допускает выполнения более одной операции чтения одновременно и предыдущая операция чтения ещё не завершена
ShutdownChannelGroupException — если канал связан с group, работа которой завершена

read

Future<Integer> read(ByteBuffer dst)
Читает последовательность байтов из этого канала в указанный буфер.

Этот метод запускает асинхронную операцию чтения последовательности байтов из этого канала в указанный буфер. Метод ведёт себя точно так же, как метод read(ByteBuffer,Object,CompletionHandler), за исключением того, что вместо указания обработчика завершения он возвращает Future, представляющий ожидающий результат. Метод get объекта Future возвращает количество прочитанных байтов или -1, если не удалось прочитать ни одного байта, поскольку канал достиг конца потока.

Параметры:
dst — буфер, в который будут перенесены байты
Возвращает:
Future, представляющий результат операции
Выбрасывает:
IllegalArgumentException — если буфер доступен только для чтения
ReadPendingException — если канал не допускает выполнения более одной операции чтения одновременно и предыдущая операция чтения ещё не завершена

write

<A> void write(ByteBuffer src, A attachment, CompletionHandler<Integer, ? super A> handler)
Записывает последовательность байтов из указанного буфера в этот канал.

Этот метод запускает асинхронную операцию записи последовательности байтов из указанного буфера в этот канал. Параметр handler — это обработчик завершения, который вызывается по завершении (или при сбое) операции записи. В обработчик завершения передаётся количество записанных байтов.

Операция записи может записать в канал до r байтов, где r — количество байтов, оставшихся в буфере, то есть src.remaining() в момент начала записи. Если r равно 0, операция записи немедленно завершается с результатом 0, не запуская операцию ввода-вывода.

Предположим, что записана последовательность байтов длины n, где 0 < n <= r. Эта последовательность байтов будет перенесена из буфера начиная с индекса p, где p — позиция буфера в момент выполнения записи; индексом последнего записанного байта будет p + n - 1. По завершении позиция буфера будет равна p + n; его предел не изменится.

Буферы небезопасно использовать из нескольких параллельных потоков, поэтому не следует обращаться к буферу до завершения операции.

Этот метод можно вызвать в любой момент. Некоторые типы каналов не допускают выполнения более одной операции записи одновременно. Если поток запускает операцию записи до завершения предыдущей операции записи, будет выброшено исключение WritePendingException.

Параметры типа:
A — тип прикрепляемого объекта
Параметры:
src — буфер, из которого будут извлечены байты
attachment — объект, прикрепляемый к операции ввода-вывода; может быть null
handler — объект обработчика завершения
Выбрасывает:
WritePendingException — если канал не допускает выполнения более одной операции записи одновременно и предыдущая операция записи ещё не завершена
ShutdownChannelGroupException — если канал связан с group, работа которой завершена

write

Future<Integer> write(ByteBuffer src)
Записывает последовательность байтов из указанного буфера в этот канал.

Этот метод запускает асинхронную операцию записи последовательности байтов из указанного буфера в этот канал. Метод ведёт себя точно так же, как метод write(ByteBuffer,Object,CompletionHandler), за исключением того, что вместо указания обработчика завершения он возвращает Future, представляющий ожидающий результат. Метод get объекта Future возвращает количество записанных байтов.

Параметры:
src — буфер, из которого будут извлечены байты
Возвращает:
Future, представляющий результат операции
Выбрасывает:
WritePendingException — если канал не допускает выполнения более одной операции записи одновременно и предыдущая операция записи ещё не завершена

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, обзоры концепций, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторское право © 1993, 2025, Oracle и/или её аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/nio/channels/AsynchronousByteChannel.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API