Spec-Zone.ru › OpenJDK 24

Интерфейс 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)
Записывает последовательность байтов в этот канал из заданного буфера.

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

close

Методы, объявленные в интерфейсе java.nio.channels.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.

Type Parameters:
A - Тип присоединенного объекта
Parameters:
dst - Буфер, в который будут перенесены байты
attachment - Объект, присоединяемый к операции ввода-вывода; может быть null
handler - Обработчик завершения
Throws:
IllegalArgumentException - Если буфер является только для чтения
ReadPendingException - Если канал не позволяет иметь более одной операции чтения в очереди, а предыдущая операция чтения не завершена
ShutdownChannelGroupException - Если канал связан с group, который завершен

read

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

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

Parameters:
dst - Буфер, в который будут перенесены байты
Returns:
Future, представляющее результат операции
Throws:
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.

Type Parameters:
A - Тип присоединенного объекта
Parameters:
src - Буфер, из которого будут извлечены байты
attachment - Объект, присоединяемый к операции ввода-вывода; может быть null
handler - Объект обработчика завершения
Throws:
WritePendingException - Если канал не позволяет иметь более одной операции записи в очереди, а предыдущая операция записи не завершена
ShutdownChannelGroupException - Если канал связан с group, который завершен

write

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

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

Parameters:
src - Буфер, из которого будут извлечены байты
Returns:
Future, представляющее результат операции
Throws:
WritePendingException - Если канал не позволяет иметь более одной операции записи в очереди, а предыдущая операция записи не завершена

© 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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/nio/channels/AsynchronousByteChannel.html

Spec-Zone.ru

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