Spec-Zone.ru › OpenJDK 21

Интерфейс 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 параметров не соблюдаются
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, 2023, 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/21/docs/api/java.base/java/nio/channels/ScatteringByteChannel.html

Spec-Zone.ru

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