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