Spec-Zone.ru › OpenJDK 8

Интерфейс ScatteringByteChannel

Все суперинтерфейсы:
AutoCloseable, Канал, 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.ReadableByteChannel

read

Методы, унаследованные от интерфейса java.nio.channels.Канал

close, isOpen

Методы

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.

Spec-Zone.ru

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