Класс 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 |
connect |
Подключает этот канал. |
abstract <A> void |
connect |
Подключает этот канал. |
abstract SocketAddress |
getLocalAddress() |
Возвращает адрес сокета, к которому привязан сокет этого канала. |
abstract SocketAddress |
getRemoteAddress() |
Возвращает удаленный адрес, к которому подключен сокет этого канала. |
static AsynchronousSocketChannel |
open() |
Открывает асинхронный сокетный канал. |
static AsynchronousSocketChannel |
open |
Открывает асинхронный сокетный канал. |
final AsynchronousChannelProvider |
provider() |
Возвращает поставщика, создавшего этот канал. |
abstract Future |
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 |
write |
Записывает последовательность байтов из указанного буфера в этот канал. |
abstract <A> void |
write |
Записывает последовательность байтов из подпоследовательности указанных буферов в этот канал. |
abstract <A> void |
write |
Записывает последовательность байтов из указанного буфера в этот канал. |
final <A> void |
write |
Записывает последовательность байтов из указанного буфера в этот канал. |
Методы, объявленные в классе Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait | Модификатор и тип | Метод | Описание |
|---|---|---|
protected Object |
clone() |
Создает и возвращает копию этого объекта. |
boolean |
equals |
Показывает, равен ли этот объект другому объекту. |
protected void |
finalize() |
Устарело, будет удалено: этот элемент API может быть удален в будущей версии. Финализация объявлена устаревшей и будет удалена в одном из будущих выпусков. |
final Class |
getClass() |
Возвращает класс времени выполнения этого Object. |
int |
hashCode() |
Возвращает хеш-код этого объекта. |
final void |
notify() |
Пробуждает один поток, ожидающий на мониторе этого объекта. |
final void |
notifyAll() |
Пробуждает все потоки, ожидающие на мониторе этого объекта. |
String |
toString() |
Возвращает строковое представление объекта. |
final void |
wait() |
Заставляет текущий поток ожидать пробуждения, обычно путем уведомления или прерывания. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно путем уведомления или прерывания, либо до истечения заданного промежутка реального времени. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно путем уведомления или прерывания, либо до истечения заданного промежутка реального времени. |
Методы, объявленные в интерфейсе AsynchronousChannel
close | Модификатор и тип | Метод | Описание |
|---|---|---|
void |
close() |
Закрывает этот канал. |
Методы, объявленные в интерфейсе Channel
isOpen | Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
isOpen() |
Показывает, открыт ли этот канал. |
Методы, объявленные в интерфейсе NetworkChannel
getOption, supportedOptions | Модификатор и тип | Метод | Описание |
|---|---|---|
<T> T |
getOption |
Возвращает значение параметра сокета. |
Set |
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— Если произошла другая ошибка ввода-вывода - См. также:
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 — это обработчик завершения, вызываемый после успешного установления соединения или в случае, когда соединение установить не удалось. Если соединение установить не удается, канал закрывается.
- Параметры типа:
A— Тип прикрепленного объекта- Параметры:
-
remote— Удаленный адрес, к которому нужно подключить этот канал -
attachment— Объект, прикрепляемый к операции ввода-вывода; может бытьnull -
handler— Обработчик для получения результата - Выбрасывает:
-
UnresolvedAddressException— Если указанный удаленный адрес разрешен не полностью -
UnsupportedAddressTypeException— Если тип указанного удаленного адреса не поддерживается -
AlreadyConnectedException— Если этот канал уже подключен -
ConnectionPendingException— Если в этом канале уже выполняется операция подключения -
ShutdownChannelGroupException— Если работа группы каналов завершена - См. также:
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— Если буфер доступен только для чтения или является представлениемMemorySegment, выделенного из арены с привязкой к потоку -
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— Если буфер доступен только для чтения или является представлениемMemorySegment, выделенного из арены с привязкой к потоку -
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— Если буфер доступен только для чтения или является представлениемMemorySegment, выделенного из арены с привязкой к потоку -
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— Если какой-либо буфер доступен только для чтения или является представлениемMemorySegment, выделенного из арены с привязкой к потоку -
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— Обработчик для получения результата - Выбрасывает:
-
IllegalArgumentException— Если буфер является представлениемMemorySegment, выделенного из арены с привязкой к потоку -
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— Объект-обработчик завершения - Выбрасывает:
-
IllegalArgumentException— Если буфер является представлениемMemorySegment, выделенного из арены с привязкой к потоку -
WritePendingException— Если канал не допускает более одной незавершенной операции записи и предыдущая операция записи еще не завершена -
NotYetConnectedException— Если этот канал еще не подключен -
ShutdownChannelGroupException— Если работа группы каналов завершена
write
public abstract Future<Integer> write(ByteBuffer src)
AsynchronousByteChannel Этот метод инициирует асинхронную операцию записи последовательности байтов в этот канал из указанного буфера. Метод работает точно так же, как метод write(ByteBuffer,Object,CompletionHandler), за исключением того, что вместо указания обработчика завершения этот метод возвращает Future, представляющий ожидающий результат. Метод get объекта Future возвращает количество записанных байтов.
- Определено в:
-
writeв интерфейсеAsynchronousByteChannel - Параметры:
-
src— буфер, из которого извлекаются байты - Возвращает:
- Объект Future, представляющий результат операции
- Выбрасывает:
-
IllegalArgumentException— если буфер является представлениемMemorySegment, выделенного из арены с ограничением одним потоком -
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— обработчик для получения результата - Выбрасывает:
-
IllegalArgumentException— если какой-либо из буферов является представлениемMemorySegment, выделенного из арены с ограничением одним потоком -
IndexOutOfBoundsException— если не выполнены предварительные условия для параметровoffsetиlength -
WritePendingException— если в этом канале уже выполняется операция записи -
NotYetConnectedException— если это соединение ещё не установлено -
ShutdownChannelGroupException— если группа каналов завершила работу
getLocalAddress
public abstract SocketAddress getLocalAddress() throws IOException
Если канал привязан с помощью bound к адресу сокета протокола Интернета, возвращаемое этим методом значение имеет тип InetSocketAddress.
- Определено в:
-
getLocalAddressв интерфейсеNetworkChannel - Возвращает:
- Объект
SocketAddress, к которому привязан сокет;null, если сокет канала не привязан - Выбрасывает:
-
ClosedChannelException— если канал закрыт -
IOException— если произошла ошибка ввода-вывода
© 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.