Spec-Zone.ru › OpenJDK 27

Интерфейс 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)
Считывает последовательность байтов из этого канала в часть заданной последовательности буферов.

Методы, объявленные в интерфейсе Channel

close, isOpen
Модификатор и тип Метод Описание
void close()
Закрывает этот канал.
boolean isOpen()
Показывает, открыт ли этот канал.

Методы, объявленные в интерфейсе ReadableByteChannel

read
Модификатор и тип Метод Описание
int read(ByteBuffer dst)
Считывает последовательность байтов из этого канала в заданный буфер.

Подробное описание методов

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 — если возникает другая ошибка ввода-вывода

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в документации Java SE, которая содержит более подробные описания для разработчиков, включая концептуальные обзоры, определения терминов, обходные решения и рабочие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторское право © 1993, 2026, Oracle и/или её аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API