Spec-Zone.ru › OpenJDK 27

Интерфейс 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
Модификатор и тип Метод Описание
void close()
Закрывает этот канал.

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

isOpen
Модификатор и тип Метод Описание
boolean 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 — если буфер доступен только для чтения или является представлением MemorySegment, выделенного в арене, привязанной к потоку
ReadPendingException — если канал не допускает выполнения более одной операции чтения одновременно и предыдущая операция чтения еще не завершена
ShutdownChannelGroupException — если канал связан с group, работа которой завершена

read

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

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

Параметры:
dst — буфер, в который будут переданы байты
Возвращает:
Объект Future, представляющий результат операции
Исключения:
IllegalArgumentException — если буфер доступен только для чтения или является представлением MemorySegment, выделенного в арене, привязанной к потоку
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 — объект-обработчик завершения
Исключения:
IllegalArgumentException — если буфер является представлением MemorySegment, выделенного в арене, привязанной к потоку
WritePendingException — если канал не допускает выполнения более одной операции записи одновременно и предыдущая операция записи еще не завершена
ShutdownChannelGroupException — если канал связан с group, работа которой завершена

write

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

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

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

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, обзоры концепций, определения терминов, способы обхода проблем и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторские права © 1993, 2026, 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.

Spec-Zone.ru

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