Интерфейс ScatteringByteChannel
- Все суперинтерфейсы:
AutoCloseable, Channel, Closeable, ReadableByteChannel
- Все известные реализующие классы:
DatagramChannel, FileChannel, Pipe.SourceChannel, SocketChannel
public interface ScatteringByteChannel extends ReadableByteChannel
Операция рассеивающего чтения за один вызов считывает последовательность байтов в один или несколько буферов из заданной последовательности. Рассеивающие операции чтения часто полезны при реализации сетевых протоколов или форматов файлов, в которых, например, данные группируются в сегменты, состоящие из одного или нескольких заголовков фиксированной длины, за которыми следует тело переменной длины. Аналогичные операции собирающей записи определены в интерфейсе GatheringByteChannel.
- Начиная с:
- 1.4
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
long |
read |
Считывает последовательность байтов из этого канала в заданные буферы. |
long |
read |
Считывает последовательность байтов из этого канала в подпоследовательность заданных буферов. |
Методы, объявленные в интерфейсе ReadableByteChannel
read
Подробное описание методов
read
long read(ByteBuffer[] dsts, int offset, int length) throws IOException
Вызов этого метода пытается считать из этого канала до r байтов, где r — общее количество оставшихся байтов в указанной подпоследовательности заданного массива буферов, то есть
dsts[offset].remaining()
+ dsts[offset+1].remaining()
+ ... + dsts[offset+length-1].remaining()
Предположим, что считывается последовательность байтов длиной n, где 0 <= n <= r. Первые dsts[offset].remaining() байтов этой последовательности передаются в буфер dsts[offset], следующие dsts[offset+1].remaining() байтов передаются в буфер dsts[offset+1] и так далее, пока вся последовательность байтов не будет передана в заданные буферы. В каждый буфер передаётся максимально возможное количество байтов, поэтому конечная позиция каждого обновлённого буфера, кроме последнего обновлённого буфера, гарантированно будет равна пределу этого буфера.
Этот метод можно вызвать в любое время. Однако если другой поток уже начал операцию чтения из этого канала, вызов этого метода будет заблокирован до завершения первой операции.
- Параметры:
-
dsts— Буферы, в которые будут переданы байты -
offset— Смещение в массиве буферов, указывающее на первый буфер, в который будут переданы байты; должно быть неотрицательным и не превышатьdsts.length -
length— Максимальное количество буферов, к которым можно обратиться; должно быть неотрицательным и не превышатьdsts.length-offset - Возвращает:
- Количество считанных байтов, возможно, ноль, или
-1, если канал достиг конца потока - Исключения:
-
IndexOutOfBoundsException— Если не выполнены предварительные условия для параметровoffsetиlength -
IllegalArgumentException— Если какой-либо из буферов доступен только для чтения -
NonReadableChannelException— Если этот канал не был открыт для чтения -
ClosedChannelException— Если этот канал закрыт -
AsynchronousCloseException— Если другой поток закроет этот канал во время выполнения операции чтения -
ClosedByInterruptException— Если другой поток прервёт текущий поток во время выполнения операции чтения, тем самым закрыв канал и установив статус прерывания текущего потока -
IOException— Если произойдёт другая ошибка ввода-вывода
read
long read(ByteBuffer[] dsts) throws IOException
Вызов этого метода в форме c.read(dsts) выполняется точно так же, как вызов
c.read(dsts, 0, dsts.length);
- Параметры:
-
dsts— Буферы, в которые будут переданы байты - Возвращает:
- Количество считанных байтов, возможно, ноль, или
-1, если канал достиг конца потока - Исключения:
-
IllegalArgumentException— Если какой-либо из буферов доступен только для чтения -
NonReadableChannelException— Если этот канал не был открыт для чтения -
ClosedChannelException— Если этот канал закрыт -
AsynchronousCloseException— Если другой поток закроет этот канал во время выполнения операции чтения -
ClosedByInterruptException— Если другой поток прервёт текущий поток во время выполнения операции чтения, тем самым закрыв канал и установив статус прерывания текущего потока -
IOException— Если произойдёт другая ошибка ввода-вывода
© 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://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/nio/channels/ScatteringByteChannel.html