Интерфейс 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.
- Параметры типа:
-
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, 2020, 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.