Интерфейс ReadableByteChannel
- Все суперинтерфейсы:
-
AutoCloseable,Channel,Closeable
- Все известные подинтерфейсы:
-
ByteChannel,ScatteringByteChannel,SeekableByteChannel
- Все известные реализующие классы:
-
DatagramChannel,FileChannel,Pipe.SourceChannel,SocketChannel
public interface ReadableByteChannel extends Channel
В любой момент времени может выполняться только одна операция чтения на канале для чтения. Если один поток инициирует операцию чтения на канале, любой другой поток, пытающийся инициировать другую операцию чтения, будет заблокирован до завершения первой операции. Возможна ли одновременная работа других типов операций ввода-вывода с операцией чтения зависит от типа канала.
- С:
- 1.4
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
int |
read |
Считывает последовательность байтов из этого канала в заданный буфер. |
Подробное описание методов
read
int read(ByteBuffer dst) throws IOException
Попытка прочитать до r байтов из канала, где r — количество оставшихся байтов в буфере, то есть, dst.remaining(), в момент вызова этого метода.
Предположим, что считывается последовательность байтов длиной n, где 0 <= n <= r. Эта последовательность байтов будет перенесена в буфер таким образом, что первый байт последовательности будет находиться по индексу p, а последний байт — по индексу p + n - 1, где p — позиция буфера в момент вызова этого метода. После возврата позиция буфера будет равна p + n; его предел не изменится.
Операция чтения может не заполнить буфер, и, фактически, она может вообще не прочитать ни одного байта. Происходит ли это, зависит от природы и состояния канала. Например, сокетный канал в режиме без блокировки не может прочитать больше байтов, чем сразу доступны из входного буфера сокета; аналогично, файловый канал не может прочитать больше байтов, чем осталось в файле. Однако гарантируется, что если канал находится в режиме блокировки и в буфере остается хотя бы один байт, то этот метод будет заблокирован до тех пор, пока не будет прочитан хотя бы один байт.
Этот метод может быть вызван в любой момент. Однако, если другой поток уже инициировал операцию чтения на этом канале, вызов этого метода будет заблокирован до завершения первой операции.
- Параметры:
-
dst- Буфер, в который должны быть перенесены байты - Возвращает:
- Количество прочитанных байтов, возможно ноль, или
-1если канал достиг конца потока - Исключения:
-
IllegalArgumentException- Если буфер только для чтения -
NonReadableChannelException- Если этот канал не был открыт для чтения -
ClosedChannelException- Если этот канал закрыт -
AsynchronousCloseException- Если другой поток закрывает этот канал во время выполнения операции чтения -
ClosedByInterruptException- Если другой поток прерывает текущий поток во время выполнения операции чтения, тем самым закрывая канал и устанавливая состояние прерывания текущего потока -
IOException- Если произошла какая-то другая ошибка ввода-вывода
© 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/ReadableByteChannel.html