Интерфейс AsynchronousByteChannel
- Все суперинтерфейсы:
-
AsynchronousChannel,AutoCloseable,Channel,Closeable
- Все известные реализующие классы:
AsynchronousSocketChannel
public interface AsynchronousByteChannel extends AsynchronousChannel
Некоторые каналы могут не допускать более одной операции чтения или записи, ожидающей выполнения в любой момент. Если поток вызывает метод чтения перед завершением предыдущей операции чтения, будет выброшено исключение ReadPendingException. Аналогично, если метод записи вызывается до завершения предыдущей записи, будет выброшено WritePendingException. Возможна ли одновременная работа с другими операциями ввода-вывода в процессе операции чтения зависит от типа канала.
Обратите внимание, что ByteBuffers не безопасны для использования несколькими потоками одновременно. При инициировании операции чтения или записи необходимо позаботиться о том, чтобы к буферу не было доступа до завершения операции.
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
Future<Integer> |
read |
Считывает последовательность байтов из этого канала в указанный буфер. |
<A> void |
read |
Считывает последовательность байтов из этого канала в указанный буфер. |
Future<Integer> |
write |
Записывает последовательность байтов в этот канал из заданного буфера. |
<A> void |
write |
Записывает последовательность байтов в этот канал из заданного буфера. |
Методы, объявленные в интерфейсе java.nio.channels.AsynchronousChannel
close
Подробное описание методов
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- если канал не допускает более одной операции записи, ожидающей завершения, и предыдущая операция записи не завершена
© 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/AsynchronousByteChannel.html