Интерфейс GatheringByteChannel
- Все суперинтерфейсы:
-
AutoCloseable,Channel,Closeable,WritableByteChannel
- Все известные реализующие классы:
-
DatagramChannel,FileChannel,Pipe.SinkChannel,SocketChannel
public interface GatheringByteChannel extends WritableByteChannel
Операция сбора записи записывает последовательность байтов из одного или нескольких заданных буферов в одном вызове. Операции сбора записи часто полезны при реализации сетевых протоколов или форматов файлов, которые, например, группируют данные в сегменты, состоящие из одного или нескольких заголовков фиксированной длины, за которыми следует тело переменной длины. Аналогичные операции разброса чтения определены в интерфейсе ScatteringByteChannel.
- С:
- 1.4
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
long |
write |
Записывает последовательность байтов в этот канал из заданных буферов. |
long |
write |
Записывает последовательность байтов в этот канал из подпоследовательности заданных буферов. |
Методы, объявленные в интерфейсе java.nio.channels.WritableByteChannel
write
Подробное описание методов
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- Если произошла какая-либо другая ошибка ввода-вывода
© 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/GatheringByteChannel.html