Класс 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. Асинхронные сокет-каналы поддерживают следующие параметры:
Дополнительные (зависимые от реализации) параметры также могут быть поддерживаются.
Название параметра Описание SO_SNDBUFРазмер буфера отправки сокета SO_RCVBUFРазмер буфера приема сокета SO_KEEPALIVEПоддерживать соединение активным SO_REUSEADDRПереиспользовать адрес TCP_NODELAYОтключить алгоритм Найгла
Таймауты
Методы read и write определенные в этом классе позволяют указать таймаут при инициировании операции чтения или записи. Если таймаут истекает до завершения операции, операция завершается с исключением InterruptedByTimeoutException. Таймаут может оставить канал или базовое соединение в несогласованном состоянии. Если реализация не может гарантировать, что байты не были прочитаны из канала, она устанавливает канал в состояние ошибки, зависящее от реализации. Попытка инициировать последующую операцию read приводит к сбросу неопределённого исключения времени выполнения. Аналогично, если операция write с таймаутом завершается, а реализация не может гарантировать, что байты не были записаны в канал, последующие попытки write в канал приводят к сбросу неопределенного исключения времени выполнения. Когда таймаут истекает, состояние ByteBuffer или последовательности буферов для операции ввода-вывода не определено. Буферы должны быть удалены или хотя бы нужно позаботиться о том, чтобы к буферам не было доступа, пока канал остаётся открытым. Все методы, принимающие параметры таймаута, рассматривают значения, меньшие или равные нулю, как означающие, что операция ввода-вывода не имеет таймаута.
- С момента:
- 1.7
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
protected |
Инициализирует новый экземпляр этого класса. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
abstract AsynchronousSocketChannel |
bind |
Привязывает сокет канала к локальному адресу. |
abstract Future<Void> |
connect |
Подключает этот канал. |
abstract <A> void |
connect |
Подключает этот канал. |
abstract SocketAddress |
getLocalAddress() |
Возвращает адрес сокета, к которому привязан сокет этого канала. |
abstract SocketAddress |
getRemoteAddress() |
Возвращает удалённый адрес, к которому подключен сокет этого канала. |
static AsynchronousSocketChannel |
open() |
Открывает асинхронный сокет-канал. |
static AsynchronousSocketChannel |
open |
Открывает асинхронный сокет-канал. |
final AsynchronousChannelProvider |
provider() |
Возвращает поставщика, который создал этот канал. |
abstract Future<Integer> |
read |
Считывает последовательность байтов из этого канала в заданный буфер. |
abstract <A> void |
read |
Считывает последовательность байтов из этого канала в подпоследовательность заданных буферов. |
abstract <A> void |
read |
Считывает последовательность байтов из этого канала в заданный буфер. |
final <A> void |
read |
Считывает последовательность байтов из этого канала в заданный буфер. |
abstract <T> AsynchronousSocketChannel |
setOption |
Устанавливает значение параметра сокета. |
abstract AsynchronousSocketChannel |
shutdownInput() |
Отключает соединение для чтения без закрытия канала. |
abstract AsynchronousSocketChannel |
shutdownOutput() |
Отключает соединение для записи без закрытия канала. |
abstract Future<Integer> |
write |
Записывает последовательность байтов в этот канал из заданного буфера. |
abstract <A> void |
write |
Записывает последовательность байтов в этот канал из подпоследовательности заданных буферов. |
abstract <A> void |
write |
Записывает последовательность байтов в этот канал из заданного буфера. |
final <A> void |
write |
Записывает последовательность байтов в этот канал из заданного буфера. |
Методы, унаследованные от класса java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Методы, унаследованные от интерфейса java.nio.channels.AsynchronousChannel
close
Методы, унаследованные от интерфейса java.nio.channels.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- Если произошла какая-либо другая ошибка ввода-вывода -
SecurityException- Если установлен менеджер безопасности и его методcheckListenотклоняет операцию - См. также:
setOption
public abstract <T> AsynchronousSocketChannel setOption(SocketOption<T> name, T value) throws IOException
NetworkChannel- Определено в:
-
setOptionв интерфейсеNetworkChannel - Параметры типа:
-
T- Тип значения параметра сокета - Параметры:
-
name- Параметр сокета -
value- Значение параметра сокета. Значениеnullможет быть допустимым значением для некоторых параметров сокета. - Возвращает:
- Этот канал
- Издаёт исключения:
-
IllegalArgumentException- Если значение не является допустимым значением для данного параметра сокета -
ClosedChannelException- Если этот канал закрыт -
IOException- Если произошла ошибка ввода-вывода - См. также:
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 - это обработчик завершения, который вызывается, когда подключение успешно установлено или подключение не может быть установлено. Если подключение не может быть установлено, то канал закрывается.
Этот метод выполняет точно такие же проверки безопасности, как и класс Socket. То есть, если установлен менеджер безопасности, этот метод проверяет, позволяет ли его метод checkConnect подключиться к адресу и номеру порта указанного удаленного узла.
- Параметры типа:
-
A- Тип вложения - Параметры:
-
remote- Удаленный адрес, к которому должен быть подключен этот канал -
attachment- Объект для прикрепления к операции ввода-вывода; может бытьnull -
handler- Обработчик для обработки результата - Издаёт исключения:
-
UnresolvedAddressException- Если указанный удаленный адрес не полностью разрешен -
UnsupportedAddressTypeException- Если тип указанного удаленного адреса не поддерживается -
AlreadyConnectedException- Если этот канал уже подключен -
ConnectionPendingException- Если в этом канале уже выполняется операция подключения -
ShutdownChannelGroupException- Если группа каналов завершена -
SecurityException- Если установлен менеджер безопасности и он не разрешает доступ к указанному удалённому узлу - См. также:
connect
public abstract Future<Void> connect(SocketAddress remote)
Этот метод инициирует операцию подключения к этому каналу. Этот метод ведет себя точно так же, как метод connect(SocketAddress, Object, CompletionHandler), за исключением того, что вместо указания обработчика завершения этот метод возвращает объект
Future, представляющий ожидаемый результат. Метод get объекта Future возвращает null при успешном завершении.
- Параметры:
-
remote- Удаленный адрес, к которому должен быть подключен этот канал - Возвращает:
- Объект
Future, представляющий ожидаемый результат - Издаёт исключения:
-
UnresolvedAddressException- Если указанный удаленный адрес не полностью разрешен -
UnsupportedAddressTypeException- Если тип указанного удаленного адреса не поддерживается -
AlreadyConnectedException- Если этот канал уже подключен -
ConnectionPendingException- Если в этом канале уже выполняется операция подключения -
SecurityException- Если установлен менеджер безопасности и он не разрешает доступ к указанному удалённому узлу
чтение
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).
- Type Parameters:
-
A- Тип присоединённого объекта - Parameters:
-
dst- Буфер, в который будут перенесены байты -
timeout- Максимальное время для завершения операции ввода-вывода -
unit- Единица измерения времени для аргументаtimeout -
attachment- Объект, прикрепляемый к операции ввода-вывода; может бытьnull -
handler- Обработчик для обработки результата - Throws:
-
IllegalArgumentException- Если буфер является только для чтения -
ReadPendingException- Если операция чтения уже выполняется в этом канале -
NotYetConnectedException- Если этот канал ещё не подключён -
ShutdownChannelGroupException- Если группа каналов завершила работу
чтение
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.
- Specified by:
-
readв интерфейсеAsynchronousByteChannel - Type Parameters:
-
A- Тип присоединённого объекта - Parameters:
-
dst- Буфер, в который будут перенесены байты -
attachment- Объект, прикрепляемый к операции ввода-вывода; может бытьnull -
handler- Обработчик завершения - Throws:
-
IllegalArgumentException- Если буфер является только для чтения -
ReadPendingException- Если канал не допускает одновременного выполнения более одного чтения, а предыдущее чтение не завершилось -
NotYetConnectedException- Если этот канал ещё не подключён -
ShutdownChannelGroupException- Если группа каналов завершила работу
чтение
public abstract Future<Integer> read(ByteBuffer dst)
AsynchronousByteChannel Этот метод инициирует асинхронную операцию чтения последовательности байтов из этого канала в заданный буфер. Метод работает точно так же, как метод read(ByteBuffer,Object,CompletionHandler), за исключением того, что вместо указания обработчика завершения этот метод возвращает Future , представляющий ожидаемый результат. Метод get Future возвращает количество считанных байтов или -1 , если байты не могли быть прочитаны из-за достижения конца потока канала.
- Specified by:
-
readв интерфейсеAsynchronousByteChannel - Parameters:
-
dst- Буфер, в который будут перенесены байты - Returns:
- Future, представляющее результат операции
- Throws:
-
IllegalArgumentException- Если буфер является только для чтения -
ReadPendingException- Если канал не допускает одновременного выполнения более одного чтения, а предыдущее чтение не завершилось -
NotYetConnectedException- Если этот канал ещё не подключён
чтение
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. В случае таймаута, когда реализация не может гарантировать, что байты не были прочитаны или не будут прочитаны из канала в заданные буферы, дальнейшие попытки чтения из канала приведут к сбросу неопределенного исключения времени выполнения.
- Type Parameters:
-
A- Тип присоединённого объекта - Parameters:
-
dsts- Буферы, в которые будут перенесены байты -
offset- Смещение в массиве буферов первого буфера, в который будут перенесены байты; должно быть неотрицательным и не превышатьdsts.length -
length- Максимальное количество буферов для доступа; должно быть неотрицательным и не превышатьdsts.length - offset -
timeout- Максимальное время для завершения операции ввода-вывода -
unit- Единица измерения времени для аргументаtimeout -
attachment- Объект, прикрепляемый к операции ввода-вывода; может бытьnull -
handler- Обработчик для обработки результата - Throws:
-
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).
- Type Parameters:
-
A- Тип привязки - Parameters:
-
src- Буфер, из которого необходимо извлечь байты -
timeout- Максимальное время для завершения операции ввода-вывода -
unit- Единица измерения времени для аргументаtimeout -
attachment- Объект для привязки к операции ввода-вывода; может бытьnull -
handler- Обработчик для обработки результата - Throws:
-
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.
- Specified by:
-
writeв интерфейсеAsynchronousByteChannel - Type Parameters:
-
A- Тип привязки - Parameters:
-
src- Буфер, из которого необходимо извлечь байты -
attachment- Объект для привязки к операции ввода-вывода; может бытьnull -
handler- Объект-обработчик завершения - Throws:
-
WritePendingException- Если канал не позволяет более одной операции записи в данный момент, и предыдущая операция записи не завершена -
NotYetConnectedException- Если этот канал еще не подключен -
ShutdownChannelGroupException- Если группа каналов завершила работу
write
public abstract Future<Integer> write(ByteBuffer src)
AsynchronousByteChannel Этот метод инициирует асинхронную операцию записи, чтобы записать последовательность байтов в этот канал из заданного буфера. Метод ведет себя точно так же, как метод write(ByteBuffer,Object,CompletionHandler), за исключением того, что вместо указания обработчика завершения этот метод возвращает Future, представляющий ожидаемый результат. Метод get Future возвращает количество записанных байтов.
- Specified by:
-
writeв интерфейсеAsynchronousByteChannel - Parameters:
-
src- Буфер, из которого необходимо извлечь байты - Returns:
- Future, представляющий результат операции
- Throws:
-
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. В случае таймаута, когда реализация не может гарантировать, что байты не были записаны или не будут записаны в канал из заданных буферов, дальнейшие попытки записи в канал приведут к выбрасыванию неспецифического исключения времени выполнения.
- Type Parameters:
-
A- Тип привязки - Parameters:
-
srcs- Буферы, из которых необходимо извлечь байты -
offset- Смещение в массиве буферов первого буфера, из которого необходимо извлечь байты; должно быть неотрицательным и не превышатьsrcs.length -
length- Максимальное количество буферов для доступа; должно быть неотрицательным и не превышатьsrcs.length - offset -
timeout- Максимальное время для завершения операции ввода-вывода -
unit- Единица измерения времени для аргументаtimeout -
attachment- Объект для привязки к операции ввода-вывода; может бытьnull -
handler- Обработчик для обработки результата - Throws:
-
IndexOutOfBoundsException- Если условия для параметраoffsetиlengthне соблюдены -
WritePendingException- Если в этом канале уже выполняется операция записи -
NotYetConnectedException- Если этот канал еще не подключен -
ShutdownChannelGroupException- Если группа каналов завершила работу
getLocalAddress
public abstract SocketAddress getLocalAddress() throws IOException
Если канал bound к адресу сокета Интернет-протокола, то возвращаемое значение этого метода имеет тип InetSocketAddress.
Если установлен менеджер безопасности, его метод checkConnect вызывается с локальным адресом и -1 в качестве аргументов, чтобы проверить, разрешена ли операция. Если операция не разрешена, возвращается SocketAddress , представляющий loopback адрес и локальный порт сокета канала.
- Определено в:
-
getLocalAddressв интерфейсеNetworkChannel - Возвращает:
- Адрес, к которому привязан сокет, или
SocketAddress, представляющий адрес обратной связи, если доступ запрещен менеджером безопасности, илиnullесли сокет канала не привязан - Исключения:
-
ClosedChannelException- Если канал закрыт -
IOException- Если произошла ошибка ввода-вывода
© 1993, 2021, 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/17/docs/api/java.base/java/nio/channels/AsynchronousSocketChannel.html