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