Spec-Zone.ru › OpenJDK 25

Класс AsynchronousSocketChannel

java.lang.Object
java.nio.channels.AsynchronousSocketChannel
Все реализуемые интерфейсы:
Closeable, AutoCloseable, AsynchronousByteChannel, AsynchronousChannel, Channel, NetworkChannel
public abstract class AsynchronousSocketChannel extends Object implements AsynchronousByteChannel, NetworkChannel
Асинхронный канал для подключения сокетов, ориентированных на потоки.

Асинхронные каналы сокетов создаются одним из двух способов. Новый AsynchronousSocketChannel создается вызовом одного из методов open, определенных этим классом. Созданный канал открыт, но еще не подключен. Подключенный AsynchronousSocketChannel создается при установлении соединения с сокетом AsynchronousServerSocketChannel. Невозможно создать асинхронный канал сокета для произвольного, уже существующего socket.

Новый канал подключается вызовом метода connect; после подключения канал остается подключенным до его закрытия. Определить, подключен ли канал сокета, можно вызовом метода getRemoteAddress. Попытка выполнить операцию ввода-вывода для неподключенного канала приводит к выбрасыванию исключения NotYetConnectedException.

Каналы этого типа безопасно использовать из нескольких одновременно работающих потоков. Они поддерживают одновременное чтение и запись, однако в каждый момент времени может выполняться не более одной операции чтения и одной операции записи. Если поток инициирует операцию чтения до завершения предыдущей операции чтения, будет выброшено исключение ReadPendingException. Аналогично, попытка инициировать операцию записи до завершения предыдущей операции записи приведет к выбрасыванию исключения WritePendingException.

Параметры сокета настраиваются с помощью метода setOption. Асинхронные каналы сокетов поддерживают следующие параметры:

Socket options
Имя параметра Описание
SO_SNDBUF Размер буфера отправки сокета
SO_RCVBUF Размер буфера приема сокета
SO_KEEPALIVE Поддерживать соединение активным
SO_REUSEADDR Повторно использовать адрес
TCP_NODELAY Отключить алгоритм Нейгла
Также могут поддерживаться дополнительные параметры, зависящие от реализации.

Тайм-ауты

Методы read и write, определенные этим классом, позволяют указать тайм-аут при инициировании операции чтения или записи. Если тайм-аут истекает до завершения операции, операция завершается с исключением InterruptedByTimeoutException. Истечение тайм-аута может привести к несогласованному состоянию канала или базового соединения. Если реализация не может гарантировать, что байты не были прочитаны из канала, она переводит канал в зависящее от реализации состояние ошибки. Последующая попытка инициировать операцию read приводит к выбрасыванию исключения времени выполнения, тип которого не указан. Аналогично, если истекает тайм-аут операции write и реализация не может гарантировать, что байты не были записаны в канал, последующие попытки write в канал приводят к выбрасыванию исключения времени выполнения, тип которого не указан. При истечении тайм-аута состояние ByteBuffer или последовательности буферов, используемых для операции ввода-вывода, не определено. Буферы следует отбросить или, по крайней мере, необходимо следить за тем, чтобы к ним не обращались, пока канал остается открытым. Все методы, принимающие параметры тайм-аута, считают, что значения, меньшие или равные нулю, означают отсутствие тайм-аута для операции ввода-вывода.

Начиная с:
1.7

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

AsynchronousSocketChannel(AsynchronousChannelProvider provider)
Модификатор Конструктор Описание
protected
Инициализирует новый экземпляр этого класса.

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

Модификатор и тип Метод Описание
abstract AsynchronousSocketChannel bind(SocketAddress local)
Привязывает сокет канала к локальному адресу.
abstract Future<Void> connect(SocketAddress remote)
Подключает этот канал.
abstract <A> void connect(SocketAddress remote, A attachment, CompletionHandler<Void, ? super A> handler)
Подключает этот канал.
abstract SocketAddress getLocalAddress()
Возвращает адрес сокета, к которому привязан сокет этого канала.
abstract SocketAddress getRemoteAddress()
Возвращает удаленный адрес, к которому подключен сокет этого канала.
static AsynchronousSocketChannel open()
Открывает асинхронный канал сокета.
static AsynchronousSocketChannel open(AsynchronousChannelGroup group)
Открывает асинхронный канал сокета.
final AsynchronousChannelProvider provider()
Возвращает поставщика, создавшего этот канал.
abstract Future<Integer> read(ByteBuffer dst)
Считывает последовательность байтов из этого канала в указанный буфер.
abstract <A> void read(ByteBuffer[] dsts, int offset, int length, long timeout, TimeUnit unit, A attachment, CompletionHandler<Long, ? super A> handler)
Считывает последовательность байтов из этого канала в подпоследовательность указанных буферов.
abstract <A> void read(ByteBuffer dst, long timeout, TimeUnit unit, A attachment, CompletionHandler<Integer, ? super A> handler)
Считывает последовательность байтов из этого канала в указанный буфер.
final <A> void read(ByteBuffer dst, A attachment, CompletionHandler<Integer, ? super A> handler)
Считывает последовательность байтов из этого канала в указанный буфер.
abstract <T> AsynchronousSocketChannel setOption(SocketOption<T> name, T value)
Задает значение параметра сокета.
abstract AsynchronousSocketChannel shutdownInput()
Завершает прием данных, не закрывая канал.
abstract AsynchronousSocketChannel shutdownOutput()
Завершает отправку данных, не закрывая канал.
abstract Future<Integer> write(ByteBuffer src)
Записывает последовательность байтов из указанного буфера в этот канал.
abstract <A> void write(ByteBuffer[] srcs, int offset, int length, long timeout, TimeUnit unit, A attachment, CompletionHandler<Long, ? super A> handler)
Записывает последовательность байтов из подпоследовательности указанных буферов в этот канал.
abstract <A> void write(ByteBuffer src, long timeout, TimeUnit unit, A attachment, CompletionHandler<Integer, ? super A> handler)
Записывает последовательность байтов из указанного буфера в этот канал.
final <A> void write(ByteBuffer src, A attachment, CompletionHandler<Integer, ? super A> handler)
Записывает последовательность байтов из указанного буфера в этот канал.

Методы, объявленные в классе Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

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

close

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

isOpen

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

getOption, supportedOptions

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

AsynchronousSocketChannel

protected AsynchronousSocketChannel(AsynchronousChannelProvider provider)
Инициализирует новый экземпляр этого класса.
Параметры:
provider — провайдер, создавший этот канал

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

provider

public final AsynchronousChannelProvider provider()
Возвращает провайдера, создавшего этот канал.
Возвращает:
Провайдер, создавший этот канал

open

public static AsynchronousSocketChannel open(AsynchronousChannelGroup group) throws IOException
Открывает асинхронный сокетный канал.

Новый канал создается путем вызова метода openAsynchronousSocketChannel у AsynchronousChannelProvider, создавшего группу. Если параметр группы равен null, результирующий канал создается системным провайдером по умолчанию и привязывается к группе по умолчанию.

Параметры:
group — группа, к которой следует привязать вновь созданный канал, или null для группы по умолчанию
Возвращает:
Новый асинхронный сокетный канал
Выбрасывает:
ShutdownChannelGroupException — если работа группы каналов завершена
IOException — если произошла ошибка ввода-вывода

open

public static AsynchronousSocketChannel open() throws IOException
Открывает асинхронный сокетный канал.

Этот метод возвращает асинхронный сокетный канал, привязанный к группе по умолчанию. Этот метод эквивалентен вычислению выражения:

    open((AsynchronousChannelGroup)null);
Возвращает:
Новый асинхронный сокетный канал
Выбрасывает:
IOException — если произошла ошибка ввода-вывода

bind

public abstract AsynchronousSocketChannel bind(SocketAddress local) throws IOException
Описание скопировано из интерфейса: NetworkChannel
Привязывает сокет канала к локальному адресу.

Этот метод устанавливает связь между сокетом и локальным адресом. После установления связи сокет остается привязанным до закрытия канала. Если параметр local имеет значение null, сокет будет привязан к адресу, назначенному автоматически.

Определено в:
bind в интерфейсе NetworkChannel
Параметры:
local — адрес, к которому следует привязать сокет, или null, чтобы привязать сокет к автоматически назначенному адресу сокета
Возвращает:
Этот канал
Выбрасывает:
ConnectionPendingException — если на этом канале уже выполняется операция подключения
AlreadyBoundException — если сокет уже привязан
UnsupportedAddressTypeException — если тип указанного адреса не поддерживается
ClosedChannelException — если канал закрыт
IOException — если произошла другая ошибка ввода-вывода
См. также:
  • NetworkChannel.getLocalAddress()

setOption

public abstract <T> AsynchronousSocketChannel setOption(SocketOption<T> name, T value) throws IOException
Описание скопировано из интерфейса: NetworkChannel
Устанавливает значение параметра сокета.
Определено в:
setOption в интерфейсе NetworkChannel
Параметры типа:
T — тип значения параметра сокета
Параметры:
name — параметр сокета
value — значение параметра сокета. Значение null может быть допустимым для некоторых параметров сокета.
Возвращает:
Этот канал
Выбрасывает:
IllegalArgumentException — если значение недопустимо для этого параметра сокета
ClosedChannelException — если этот канал закрыт
IOException — если произошла ошибка ввода-вывода
См. также:
  • StandardSocketOptions

shutdownInput

public abstract AsynchronousSocketChannel shutdownInput() throws IOException
Отключает чтение в соединении, не закрывая канал.

После отключения чтения последующие операции чтения канала будут возвращать -1 — признак конца потока. Если входящая сторона соединения уже отключена, вызов этого метода не оказывает эффекта. Влияние на выполняющуюся операцию чтения зависит от системы и поэтому не определено. Эффект, если таковой имеется, при наличии непрочитанных данных в буфере приема сокета или при последующем поступлении данных также зависит от системы.

Возвращает:
Канал
Выбрасывает:
NotYetConnectedException — если соединение с этим каналом еще не установлено
ClosedChannelException — если этот канал закрыт
IOException — если произошла другая ошибка ввода-вывода

shutdownOutput

public abstract AsynchronousSocketChannel shutdownOutput() throws IOException
Отключает запись в соединении, не закрывая канал.

После отключения записи последующие попытки записать данные в канал будут приводить к выбрасыванию ClosedChannelException. Если исходящая сторона соединения уже отключена, вызов этого метода не оказывает эффекта. Влияние на выполняющуюся операцию записи зависит от системы и поэтому не определено.

Возвращает:
Канал
Выбрасывает:
NotYetConnectedException — если соединение с этим каналом еще не установлено
ClosedChannelException — если этот канал закрыт
IOException — если произошла другая ошибка ввода-вывода

getRemoteAddress

public abstract SocketAddress getRemoteAddress() throws IOException
Возвращает удаленный адрес, к которому подключен сокет этого канала.

Если канал привязан и подключен к сокетному адресу протокола Интернета, возвращаемое этим методом значение имеет тип InetSocketAddress.

Возвращает:
Удаленный адрес; null, если сокет канала не подключен
Выбрасывает:
ClosedChannelException — если канал закрыт
IOException — если произошла ошибка ввода-вывода

connect

public abstract <A> void connect(SocketAddress remote, A attachment, CompletionHandler<Void, ? super A> handler)
Подключает этот канал.

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

Параметры типа:
A — тип присоединенного объекта
Параметры:
remote — удаленный адрес, к которому должен быть подключен этот канал
attachment — объект, присоединяемый к операции ввода-вывода; может быть null
handler — обработчик результата
Выбрасывает:
UnresolvedAddressException — если указанный удаленный адрес разрешен не полностью
UnsupportedAddressTypeException — если тип указанного удаленного адреса не поддерживается
AlreadyConnectedException — если этот канал уже подключен
ConnectionPendingException — если на этом канале уже выполняется операция подключения
ShutdownChannelGroupException — если работа группы каналов завершена
См. также:
  • getRemoteAddress()

connect

public abstract Future<Void> connect(SocketAddress remote)
Подключает этот канал.

Этот метод инициирует операцию подключения канала. Он работает точно так же, как метод connect(SocketAddress, Object, CompletionHandler), за исключением того, что вместо указания обработчика завершения возвращает Future, представляющий ожидающий результат. Метод get объекта Future возвращает null при успешном завершении.

Параметры:
remote — удаленный адрес, к которому должен быть подключен этот канал
Возвращает:
Объект Future, представляющий ожидающий результат
Выбрасывает:
UnresolvedAddressException — если указанный удаленный адрес разрешен не полностью
UnsupportedAddressTypeException — если тип указанного удаленного адреса не поддерживается
AlreadyConnectedException — если этот канал уже подключен
ConnectionPendingException — если на этом канале уже выполняется операция подключения

read

public abstract <A> void read(ByteBuffer dst, long timeout, TimeUnit unit, A attachment, CompletionHandler<Integer, ? super A> handler)
Считывает последовательность байтов из этого канала в указанный буфер.

Этот метод инициирует асинхронную операцию чтения последовательности байтов из этого канала в указанный буфер. Параметр handler — это обработчик завершения, который вызывается при завершении (или сбое) операции чтения. Передаваемый обработчику результат — количество считанных байтов или -1, если байты не удалось считать, поскольку канал достиг конца потока.

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

В остальном этот метод работает так же, как метод AsynchronousByteChannel.read(ByteBuffer,Object,CompletionHandler).

Параметры типа:
A — тип присоединенного объекта
Параметры:
dst — буфер, в который передаются байты
timeout — максимальное время завершения операции ввода-вывода
unit — единица измерения времени аргумента timeout
attachment — объект, присоединяемый к операции ввода-вывода; может быть null
handler — обработчик результата
Выбрасывает:
IllegalArgumentException — если буфер доступен только для чтения
ReadPendingException — если на этом канале уже выполняется операция чтения
NotYetConnectedException — если соединение с этим каналом еще не установлено
ShutdownChannelGroupException — если работа группы каналов завершена

read

public final <A> void read(ByteBuffer dst, A attachment, CompletionHandler<Integer, ? super A> handler)
Описание скопировано из интерфейса: AsynchronousByteChannel
Считывает последовательность байтов из этого канала в указанный буфер.

Этот метод инициирует асинхронную операцию чтения последовательности байтов из этого канала в указанный буфер. Параметр handler — это обработчик завершения, который вызывается при завершении (или сбое) операции чтения. Передаваемый обработчику результат — количество считанных байтов или -1, если байты не удалось считать, поскольку канал достиг конца потока.

Операция чтения может считать из канала до r байтов, где r — число байтов, оставшихся в буфере, то есть dst.remaining() в момент начала чтения. Если r равно 0, операция чтения немедленно завершается с результатом 0 без выполнения операции ввода-вывода.

Предположим, что считана последовательность байтов длины n, где 0 < n <= r. Эта последовательность байтов будет передана в буфер так, что первый байт последовательности окажется по индексу p, а последний — по индексу p + n - 1, где p — позиция буфера в момент выполнения чтения. После завершения позиция буфера будет равна p + n; его предел не изменится.

Буферы небезопасно использовать одновременно из нескольких потоков, поэтому не следует обращаться к буферу до завершения операции.

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

Определено в:
read в интерфейсе AsynchronousByteChannel
Параметры типа:
A — тип присоединенного объекта
Параметры:
dst — буфер, в который передаются байты
attachment — объект, присоединяемый к операции ввода-вывода; может быть null
handler — обработчик завершения
Выбрасывает:
IllegalArgumentException — если буфер доступен только для чтения
ReadPendingException — если канал не допускает одновременного выполнения нескольких операций чтения и предыдущая операция чтения еще не завершена
NotYetConnectedException — если соединение с этим каналом еще не установлено
ShutdownChannelGroupException — если работа группы каналов завершена

read

public abstract Future<Integer> read(ByteBuffer dst)
Описание скопировано из интерфейса: AsynchronousByteChannel
Считывает последовательность байтов из этого канала в указанный буфер.

Этот метод инициирует асинхронную операцию чтения последовательности байтов из этого канала в указанный буфер. Он работает точно так же, как метод read(ByteBuffer,Object,CompletionHandler), за исключением того, что вместо указания обработчика завершения возвращает Future, представляющий ожидающий результат. Метод get объекта Future возвращает количество считанных байтов или -1, если байты не удалось считать, поскольку канал достиг конца потока.

Определено в:
read в интерфейсе AsynchronousByteChannel
Параметры:
dst — буфер, в который передаются байты
Возвращает:
Future, представляющий результат операции
Выбрасывает:
IllegalArgumentException — если буфер доступен только для чтения
ReadPendingException — если канал не допускает одновременного выполнения нескольких операций чтения и предыдущая операция чтения еще не завершена
NotYetConnectedException — если соединение с этим каналом еще не установлено

read

public abstract <A> void read(ByteBuffer[] dsts, int offset, int length, long timeout, TimeUnit unit, A attachment, CompletionHandler<Long, ? super A> handler)
Считывает последовательность байтов из этого канала в подпоследовательность указанных буферов. Эта операция, иногда называемая рассеивающим чтением, часто полезна при реализации сетевых протоколов, группирующих данные в сегменты, состоящие из одного или нескольких заголовков фиксированной длины, за которыми следует тело переменной длины. Параметр handler — это обработчик завершения, который вызывается при завершении (или сбое) операции чтения. Передаваемый обработчику результат — количество считанных байтов или -1, если байты не удалось считать, поскольку канал достиг конца потока.

Этот метод инициирует чтение до 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] и так далее, пока вся последовательность байтов не будет передана в указанные буферы. В каждый буфер передается максимально возможное число байтов, поэтому гарантируется, что конечная позиция каждого обновленного буфера, кроме последнего обновленного буфера, будет равна его пределу. Операционная система может ограничивать количество буферов, используемых в одной операции ввода-вывода. Если количество буферов с оставшимися байтами превышает этот предел, операция ввода-вывода выполняется с максимально допустимым операционной системой количеством буферов.

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

Параметры типа:
A — тип присоединенного объекта
Параметры:
dsts — буферы, в которые передаются байты
offset — смещение в массиве буферов, указывающее на первый буфер, в который передаются байты; должно быть неотрицательным и не превышать dsts.length
length — максимальное количество буферов, к которым разрешен доступ; должно быть неотрицательным и не превышать dsts.length - offset
timeout — максимальное время завершения операции ввода-вывода
unit — единица измерения времени аргумента timeout
attachment — объект, присоединяемый к операции ввода-вывода; может быть null
handler — обработчик результата
Выбрасывает:
IndexOutOfBoundsException — если не выполнены предварительные условия для параметров offset и length
IllegalArgumentException — если буфер доступен только для чтения
ReadPendingException — если на этом канале уже выполняется операция чтения
NotYetConnectedException — если соединение с этим каналом еще не установлено
ShutdownChannelGroupException — если работа группы каналов завершена

write

public abstract <A> void write(ByteBuffer src, long timeout, TimeUnit unit, A attachment, CompletionHandler<Integer, ? super A> handler)
Записывает последовательность байтов в этот канал из указанного буфера.

Этот метод инициирует асинхронную операцию записи последовательности байтов в этот канал из указанного буфера. Параметр handler — это обработчик завершения, который вызывается при завершении (или сбое) операции записи. Передаваемый обработчику результат — количество записанных байтов.

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

В остальном этот метод работает так же, как метод AsynchronousByteChannel.write(ByteBuffer,Object,CompletionHandler).

Параметры типа:
A — тип присоединенного объекта
Параметры:
src — буфер, из которого извлекаются байты
timeout — максимальное время завершения операции ввода-вывода
unit — единица измерения времени аргумента timeout
attachment — объект, присоединяемый к операции ввода-вывода; может быть null
handler — обработчик результата
Выбрасывает:
WritePendingException — если на этом канале уже выполняется операция записи
NotYetConnectedException — если соединение с этим каналом еще не установлено
ShutdownChannelGroupException — если работа группы каналов завершена

write

public final <A> void write(ByteBuffer src, A attachment, CompletionHandler<Integer, ? super A> handler)
Описание скопировано из интерфейса: AsynchronousByteChannel
Записывает последовательность байтов в этот канал из указанного буфера.

Этот метод инициирует асинхронную операцию записи последовательности байтов в этот канал из указанного буфера. Параметр handler — это обработчик завершения, который вызывается при завершении (или сбое) операции записи. Передаваемый обработчику результат — количество записанных байтов.

Операция записи может записать в канал до r байтов, где r — количество байтов, оставшихся в буфере, то есть src.remaining() в момент начала записи. Если r равно 0, операция записи немедленно завершается с результатом 0 без выполнения операции ввода-вывода.

Предположим, что записана последовательность байтов длины n, где 0 < n <= r. Эта последовательность байтов будет передана из буфера начиная с индекса p, где p — позиция буфера в момент выполнения записи; индекс последнего записанного байта будет равен p + n - 1. После завершения позиция буфера будет равна p + n; его предел не изменится.

Буферы небезопасно использовать одновременно из нескольких потоков, поэтому не следует обращаться к буферу до завершения операции.

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

Определено в:
write в интерфейсе AsynchronousByteChannel
Параметры типа:
A — тип присоединенного объекта
Параметры:
src — буфер, из которого извлекаются байты
attachment — объект, присоединяемый к операции ввода-вывода; может быть null
handler — объект обработчика завершения
Выбрасывает:
WritePendingException — если канал не допускает одновременного выполнения нескольких операций записи и предыдущая операция записи еще не завершена
NotYetConnectedException — если соединение с этим каналом еще не установлено
ShutdownChannelGroupException — если работа группы каналов завершена

write

public abstract Future<Integer> write(ByteBuffer src)
Описание скопировано из интерфейса: AsynchronousByteChannel
Записывает последовательность байтов в этот канал из указанного буфера.

Этот метод инициирует асинхронную операцию записи последовательности байтов в этот канал из указанного буфера. Он работает точно так же, как метод write(ByteBuffer,Object,CompletionHandler), за исключением того, что вместо указания обработчика завершения возвращает Future, представляющий ожидающий результат. Метод get объекта Future возвращает количество записанных байтов.

Определено в:
write в интерфейсе AsynchronousByteChannel
Параметры:
src — буфер, из которого извлекаются байты
Возвращает:
Future, представляющий результат операции
Выбрасывает:
WritePendingException — если канал не допускает одновременного выполнения нескольких операций записи и предыдущая операция записи еще не завершена
NotYetConnectedException — если соединение с этим каналом еще не установлено

write

public abstract <A> void write(ByteBuffer[] srcs, int offset, int length, long timeout, TimeUnit unit, A attachment, CompletionHandler<Long, ? super A> handler)
Записывает последовательность байтов в этот канал из подпоследовательности указанных буферов. Эта операция, иногда называемая сборной записью, часто полезна при реализации сетевых протоколов, в которых данные группируются в сегменты, состоящие из одного или нескольких заголовков фиксированной длины, за которыми следует тело переменной длины. Параметр handler — это обработчик завершения, который вызывается по завершении (или сбое) операции записи. Результат, передаваемый обработчику завершения, — это количество записанных байтов.

Этот метод инициирует запись в этот канал до 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] и так далее, пока не будет записана вся последовательность байтов. Из каждого буфера записывается максимально возможное количество байтов, поэтому конечная позиция каждого обновлённого буфера, кроме последнего обновлённого буфера, гарантированно совпадает с пределом этого буфера. Операционная система может ограничивать количество буферов, используемых в операции ввода-вывода. Если количество буферов (с оставшимися байтами) превышает это ограничение, операция ввода-вывода выполняется с максимально допустимым операционной системой количеством буферов.

Если задан тайм-аут и он истекает до завершения операции, она завершается с исключением InterruptedByTimeoutException. Если происходит тайм-аут и реализация не может гарантировать, что байты не были записаны или не будут записаны в канал из заданных буферов, дальнейшие попытки записи в канал приведут к выбросу неопределённого исключения времени выполнения.

Параметры типа:
A — тип присоединённого объекта
Параметры:
srcs — буферы, из которых необходимо получить байты
offset — смещение в массиве буферов, указывающее на первый буфер, из которого необходимо получить байты; должно быть неотрицательным и не превышать srcs.length
length — максимальное количество буферов, к которым можно обратиться; должно быть неотрицательным и не превышать srcs.length - offset
timeout — максимальное время, отводимое на завершение операции ввода-вывода
unit — единица измерения времени аргумента timeout
attachment — объект, присоединяемый к операции ввода-вывода; может быть null
handler — обработчик для получения результата
Исключения:
IndexOutOfBoundsException — если не выполнены предварительные условия для параметров offset и length
WritePendingException — если в этом канале уже выполняется операция записи
NotYetConnectedException — если подключение этого канала ещё не установлено
ShutdownChannelGroupException — если группа каналов завершила работу

getLocalAddress

public abstract SocketAddress getLocalAddress() throws IOException
Возвращает адрес сокета, к которому привязан сокет этого канала.

Если канал bound к адресу сокета Internet Protocol, возвращаемое этим методом значение имеет тип InetSocketAddress.

Определено в:
getLocalAddress в интерфейсе NetworkChannel
Возвращает:
SocketAddress, к которому привязан сокет; null, если сокет канала не привязан
Исключения:
ClosedChannelException — если канал закрыт
IOException — если произошла ошибка ввода-вывода

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в разделе документации Java SE, содержащем более подробные описания, ориентированные на разработчиков, с концептуальными обзорами, определениями терминов, обходными решениями и работающими примерами кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторское право © 1993, 2025, 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.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/nio/channels/AsynchronousSocketChannel.html

Spec-Zone.ru

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