Spec-Zone.ru › OpenJDK 27

Интерфейс GatheringByteChannel

Все суперинтерфейсы:
AutoCloseable, Channel, Closeable, WritableByteChannel
Все известные реализующие классы:
DatagramChannel, FileChannel, Pipe.SinkChannel, SocketChannel
public interface GatheringByteChannel extends WritableByteChannel
Канал, который может записывать байты из последовательности буферов.

Операция собирающей записи за один вызов записывает последовательность байтов из одного или нескольких буферов заданной последовательности. Собирающая запись часто полезна при реализации сетевых протоколов или файловых форматов, в которых, например, данные объединяются в сегменты, состоящие из одного или нескольких заголовков фиксированной длины, за которыми следует тело переменной длины. Аналогичные операции разделяющего чтения определены в интерфейсе ScatteringByteChannel.

Начиная с:
1.4

Краткое описание методов

Модификатор и тип Метод Описание
long write(ByteBuffer[] srcs)
Записывает в этот канал последовательность байтов из заданных буферов.
long write(ByteBuffer[] srcs, int offset, int length)
Записывает в этот канал последовательность байтов из части заданной последовательности буферов.

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

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

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

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

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

write

long write(ByteBuffer[] srcs, int offset, int length) throws IOException
Записывает в этот канал последовательность байтов из части заданной последовательности буферов.

Предпринимается попытка записать в этот канал до r байтов, где r — общее количество оставшихся байтов в указанной части заданного массива буферов, то есть

    srcs[offset].remaining()
        + srcs[offset+1].remaining()
        + ... + srcs[offset+length-1].remaining()
на момент вызова этого метода.

Предположим, что записана последовательность байтов длиной n, где 0 <= n <= r. Первые srcs[offset].remaining() байтов этой последовательности записываются из буфера srcs[offset], следующие srcs[offset+1].remaining() байтов записываются из буфера srcs[offset+1] и так далее, пока не будет записана вся последовательность байтов. Из каждого буфера записывается максимально возможное количество байтов, поэтому конечная позиция каждого обновленного буфера, кроме последнего обновленного буфера, гарантированно будет равна пределу этого буфера.

Для многих типов каналов операция записи возвращает управление только после записи всех запрошенных r байтов. Некоторые типы каналов, в зависимости от своего состояния, могут записать только часть байтов или вовсе ничего не записать. Например, сокетный канал в неблокирующем режиме не может записать больше байтов, чем свободно в выходном буфере сокета. Чтобы гарантировать запись всех оставшихся байтов, может потребоваться вызвать метод записи несколько раз.

Этот метод можно вызвать в любое время. Однако если другой поток уже начал операцию записи в этом канале, вызов этого метода будет заблокирован до завершения первой операции.

Параметры:
srcs — буферы, из которых извлекаются байты
offset — смещение в массиве буферов, указывающее на первый буфер, из которого извлекаются байты; должно быть неотрицательным и не превышать srcs.length
length — максимальное количество доступных буферов; должно быть неотрицательным и не превышать srcs.length - offset
Возвращает:
Количество записанных байтов, возможно, ноль
Выбрасывает:
IndexOutOfBoundsException — если не соблюдены предварительные условия для параметров offset и length
NonWritableChannelException — если этот канал не был открыт для записи
ClosedChannelException — если этот канал закрыт
AsynchronousCloseException — если другой поток закрывает этот канал во время выполнения операции записи
ClosedByInterruptException — если другой поток прерывает текущий поток во время выполнения операции записи, тем самым закрывая канал и устанавливая статус прерывания текущего потока
IOException — если возникает другая ошибка ввода-вывода

write

long write(ByteBuffer[] srcs) throws IOException
Записывает в этот канал последовательность байтов из заданных буферов.

Вызов этого метода в форме c.write(srcs) ведет себя точно так же, как вызов

    c.write(srcs, 0, srcs.length);
Параметры:
srcs — буферы, из которых извлекаются байты
Возвращает:
Количество записанных байтов, возможно, ноль
Выбрасывает:
NonWritableChannelException — если этот канал не был открыт для записи
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