Класс SocketChannel
- Все реализованные интерфейсы:
-
Closeable,AutoCloseable,ByteChannel,Channel,GatheringByteChannel,InterruptibleChannel,NetworkChannel,ReadableByteChannel,ScatteringByteChannel,WritableByteChannel
public abstract class SocketChannel extends AbstractSelectableChannel implements ByteChannel, ScatteringByteChannel, GatheringByteChannel, NetworkChannel
Канал сокета создается путем вызова одного из методов open этого класса. Метод open без аргументов открывает канал сокета для сокета протокола Интернета. Метод open(ProtocolFamily) используется для открытия канала сокета для сокета указанной семейства протоколов. Создать канал для произвольного существующего сокета невозможно. Новый созданный канал сокета открыт, но еще не подключен. Попытка вызвать операцию ввода-вывода для неподключенного канала приведет к сбросу исключения NotYetConnectedException. Канал сокета можно подключить, вызвав его метод connect; после подключения канал сокета остается подключенным до его закрытия. Подключен ли канал сокета, можно определить, вызвав его метод isConnected.
Каналы сокетов поддерживают неблокирующее подключение: канал сокета может быть создан, и процесс установления связи с удаленным сокетом может быть инициирован через метод connect для последующего завершения методом finishConnect. Можно ли определить, идет ли в процессе операция подключения, можно определить, вызвав метод isConnectionPending.
Каналы сокетов поддерживают асинхронное завершение, что аналогично асинхронной операции закрытия, указанной в классе Channel. Если входная сторона сокета закрывается одной нитью, в то время как другая нить заблокирована в операции чтения по каналу сокета, операция чтения в заблокированной нити завершится без чтения каких-либо байтов и вернет -1. Если выходная сторона сокета закрывается одной нитью, в то время как другая нить заблокирована в операции записи по каналу сокета, заблокированная нить получит AsynchronousCloseException.
Параметры сокета настраиваются с помощью метода setOption. Каналы сокетов для сокетов протокола Интернета поддерживают следующие параметры:
Имя параметра Описание SO_SNDBUFРазмер буфера отправки сокета SO_RCVBUFРазмер буфера приема сокета SO_KEEPALIVEПоддерживать соединение активным SO_REUSEADDRПовторное использование адреса SO_LINGERОставаться на связи при закрытии, если данные присутствуют (только при настройке в блокирующем режиме) TCP_NODELAYОтключить алгоритм Nagle
Каналы сокетов для сокетов доменных сокетов Unix поддерживают:
Имя параметра Описание SO_SNDBUFРазмер буфера отправки сокета SO_RCVBUFРазмер буфера приема сокета SO_LINGERОставаться на связи при закрытии, если данные присутствуют (только при настройке в блокирующем режиме)
Дополнительные (специфичные для реализации) параметры также могут быть поддерживаемы.
Каналы сокетов безопасны для использования несколькими конкурирующими нитями. Они поддерживают одновременное чтение и запись, хотя максимум одна нить может читать, а максимум одна нить может записывать в любой момент времени. Методы connect и finishConnect взаимно синхронизированы, и попытка инициировать операцию чтения или записи, в то время как в процессе выполнения один из этих методов, приведет к блокировке до завершения этого вызова.
- Since:
- 1.4
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
protected |
Инициализирует новый экземпляр этого класса. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
abstract SocketChannel |
bind |
Привязывает сокет канала к локальному адресу. |
abstract boolean |
connect |
Подключает сокет этого канала. |
abstract boolean |
finishConnect() |
Завершает процесс подключения сокета канала. |
abstract SocketAddress |
getLocalAddress() |
Возвращает адрес сокета, к которому привязан сокет этого канала. |
abstract SocketAddress |
getRemoteAddress() |
Возвращает удалённый адрес, к которому подключён сокет этого канала. |
abstract boolean |
isConnected() |
Указывает, подключен ли сетевой сокет этого канала. |
abstract boolean |
isConnectionPending() |
Указывает, происходит ли в настоящее время операция подключения на этом канале. |
static SocketChannel |
open() |
Открывает сокетный канал для сокета протокола Интернета. |
static SocketChannel |
open |
Открывает сокетный канал. |
static SocketChannel |
open |
Открывает сокетный канал и подключает его к удалённому адресу. |
abstract int |
read |
Считывает последовательность байтов из этого канала в заданный буфер. |
final long |
read |
Считывает последовательность байтов из этого канала в заданные буферы. |
abstract long |
read |
Считывает последовательность байтов из этого канала в подпоследовательность заданных буферов. |
abstract <T> SocketChannel |
setOption |
Устанавливает значение параметра сокета. |
abstract SocketChannel |
shutdownInput() |
Останавливает подключение для чтения, не закрывая канал. |
abstract SocketChannel |
shutdownOutput() |
Останавливает подключение для записи, не закрывая канал. |
abstract Socket |
socket() |
Получает сокет, связанный с этим каналом. |
final int |
validOps() |
Возвращает набор операций, идентифицирующий поддерживаемые операции этого канала. |
abstract int |
write |
Записывает последовательность байтов в этот канал из заданного буфера. |
final long |
write |
Записывает последовательность байтов в этот канал из заданных буферов. |
abstract long |
write |
Записывает последовательность байтов в этот канал из подпоследовательности заданных буферов. |
Методы, объявленные в классе java.nio.channels.spi.AbstractSelectableChannel
blockingLock, configureBlocking, implCloseChannel, implCloseSelectableChannel, implConfigureBlocking, isBlocking, isRegistered, keyFor, provider, register
Методы, объявленные в классе java.nio.channels.SelectableChannel
register
Методы, объявленные в классе java.nio.channels.spi.AbstractInterruptibleChannel
begin, close, end, isOpen
Методы, объявленные в классе java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Методы, объявленные в интерфейсе java.nio.channels.NetworkChannel
getOption, supportedOptions
Подробное описание конструкторов
SocketChannel
protected SocketChannel(SelectorProvider provider)
- Параметры:
-
provider- Провайдер, который создал этот канал
Подробное описание методов
open
public static SocketChannel open() throws IOException
Новый канал создается путем вызова метода openSocketChannel системно-глобального объекта по умолчанию SelectorProvider.
- Возвращает:
- Новый сокет-канал
- Исключения:
-
IOException- Если произошла ошибка ввода-вывода - См. также:
open
public static SocketChannel open(ProtocolFamily family) throws IOException
family задает protocol family сокета канала. Новый канал создается путем вызова метода openSocketChannel(ProtocolFamily) системно-глобального объекта по умолчанию SelectorProvider.
- Параметры:
-
family- Семейство протоколов - Возвращает:
- Новый сокет-канал
- Исключения:
-
UnsupportedOperationException- Если заданное семейство протоколов не поддерживается. Например, если параметр задан какStandardProtocolFamily.INET6, но IPv6 не включен в платформе. -
IOException- Если произошла ошибка ввода-вывода - С тех пор:
- 15
- См. также:
open
public static SocketChannel open(SocketAddress remote) throws IOException
Если удаленный адрес является InetSocketAddress, то этот метод работает так, как если бы он вызывал метод open(), вызывал метод connect для полученного сокет-канала, передавая ему remote, а затем возвращал этот канал.
Если удаленный адрес является UnixDomainSocketAddress, то это работает путем вызова метода open(ProtocolFamily) с StandardProtocolFamily.UNIX в качестве параметра, вызова метода connect для полученного сокет-канала, передавая ему remote, а затем возвращая этот канал.
- Параметры:
-
remote- Удаленный адрес, к которому должен быть подключен новый канал - Возвращает:
- Новый и подключенный сокет-канал
- Исключения:
-
AsynchronousCloseException- Если другой поток закрывает этот канал, в то время как операция подключения находится в процессе выполнения -
ClosedByInterruptException- Если другой поток прерывает текущий поток, в то время как операция подключения находится в процессе выполнения, тем самым закрывая канал и устанавливая состояние прерывания текущего потока -
UnresolvedAddressException- Если заданный удаленный адрес является InetSocketAddress, который не полностью разрешен -
UnsupportedAddressTypeException- Если тип заданного удаленного адреса не поддерживается -
IOException- Если произошла какая-либо другая ошибка ввода-вывода - См. также:
validOps
public final int validOps()
Сокет-каналы поддерживают подключение, чтение и запись, поэтому этот метод возвращает (SelectionKey.OP_CONNECT | SelectionKey.OP_READ | SelectionKey.OP_WRITE).
- Определяется в:
-
validOpsв классеSelectableChannel - Возвращает:
- Набор допустимых операций
bind
public abstract SocketChannel bind(SocketAddress local) throws IOException
Этот метод используется для установления связи между сокетом и локальным адресом. Для сокетов протокола Интернет, после установления связи сокет остается привязанным до закрытия канала. Если параметр local имеет значение
null, то сокет будет привязан к автоматически назначенному адресу.
- Определяется в:
-
bindв интерфейсеNetworkChannel - Примечание API:
- Привязка сокет-канала к сокету Unix Domain создает файл, соответствующий пути к файлу в
UnixDomainSocketAddress. Этот файл сохраняется после закрытия канала и должен быть удален, прежде чем другой сокет сможет привязаться к тому же имени. Если сокет-канал к сокету Unix Domain неявно привязывается путем подключения без предварительного вызова bind, то его сокет является безымянным без соответствующего файла сокета в файловой системе. Если сокет-канал к сокету Unix Domain неявно привязывается вызовомbind(null), это также приводит к безымянному сокету. - Примечание реализации:
- Каждая платформа накладывает специфичные для реализации ограничения на максимальную длину имени сокета Unix Domain. Это ограничение применяется при привязке канала. Максимальная длина обычно близка к и, как правило, не меньше 100 байт.
- Параметры:
-
local- Адрес для привязки сокета, илиnullдля привязки сокета к автоматически назначенному адресу сокета - Возвращает:
- Этот канал
- Исключения:
-
ConnectionPendingException- Если уже в процессе выполнения неблокирующая операция подключения на этом канале -
AlreadyBoundException- Если сокет уже привязан -
UnsupportedAddressTypeException- Если тип заданного адреса не поддерживается -
ClosedChannelException- Если канал закрыт -
IOException- Если произошла какая-либо другая ошибка ввода-вывода - С тех пор:
- 1.7
- См. также:
setOption
public abstract <T> SocketChannel setOption(SocketOption<T> name, T value) throws IOException
NetworkChannel- Определяется в:
-
setOptionв интерфейсеNetworkChannel - Параметры типа:
T- Тип значения параметра сокета- Параметры:
-
name- Параметр сокета -
value- Значение параметра сокета. Значениеnullможет быть допустимым значением для некоторых параметров сокета. - Возвращает:
- Этот канал
- Исключения:
-
UnsupportedOperationException- Если параметр сокета не поддерживается этим каналом -
IllegalArgumentException- Если значение не является допустимым значением для этого параметра сокета -
ClosedChannelException- Если этот канал закрыт -
IOException- Если произошла ошибка ввода-вывода - С тех пор:
- 1.7
- См. также:
shutdownInput
public abstract SocketChannel shutdownInput() throws IOException
После закрытия для чтения дальнейшие чтения из канала вернут -1, указатель на конец потока. Если сторона подключения для чтения уже закрыта, то вызов этого метода не повлияет.
- Возвращает:
- Канал
- Исключения:
-
NotYetConnectedException- Если этот канал еще не подключен -
ClosedChannelException- Если этот канал закрыт -
IOException- Если произошла какая-либо другая ошибка ввода-вывода - С тех пор:
- 1.7
shutdownOutput
public abstract SocketChannel shutdownOutput() throws IOException
После закрытия для записи дальнейшие попытки записи в канал приведут к исключению ClosedChannelException. Если сторона подключения для записи уже закрыта, то вызов этого метода не повлияет.
- Возвращает:
- Канал
- Исключения:
-
NotYetConnectedException- Если этот канал еще не подключен -
ClosedChannelException- Если этот канал закрыт -
IOException- Если произошла какая-либо другая ошибка ввода-вывода - С тех пор:
- 1.7
socket
public abstract Socket socket()
- Возвращает:
- Сокет, связанный с этим каналом
- Изначает исключение:
-
UnsupportedOperationException- Если сокет канала не является сокетом протокола Интернета
isConnected
public abstract boolean isConnected()
- Возвращает:
-
true, если и только если сетевой сокет этого каналаopenи подключен
isConnectionPending
public abstract boolean isConnectionPending()
- Возвращает:
-
true, если и только если операция подключения была инициирована на этом канале, но еще не завершена вызовом методаfinishConnect
connect
public abstract boolean connect(SocketAddress remote) throws IOException
Если этот канал находится в режиме без ожидания, то вызов этого метода инициирует операцию подключения без ожидания. Если подключение устанавливается немедленно, как может произойти с локальным подключением, то этот метод возвращает true. В противном случае этот метод возвращает false, и операция подключения должна быть завершена позже вызовом метода finishConnect.
Если этот канал находится в блокирующем режиме, то вызов этого метода будет блокировать выполнение, пока подключение не будет установлено или не произойдет ошибка ввода-вывода.
Этот метод можно вызывать в любое время. Если операция чтения или записи на этом канале вызывается во время выполнения вызова этого метода, то эта операция сначала заблокируется до завершения этого вызова. Если попытка подключения не удалась, то есть, если вызов этого метода генерирует проверяемое исключение, то канал будет закрыт.
- Параметры:
-
remote- удаленный адрес, к которому должен быть подключен этот канал - Возвращает:
-
true, если подключение было установлено,false, если этот канал находится в режиме без ожидания, и операция подключения выполняется - Изначает исключение:
-
AlreadyConnectedException- Если этот канал уже подключен -
ConnectionPendingException- Если операция подключения без ожидания уже выполняется на этом канале -
ClosedChannelException- Если этот канал закрыт -
AsynchronousCloseException- Если другой поток закрывает этот канал во время операции подключения -
ClosedByInterruptException- Если другой поток прерывает текущий поток во время операции подключения, тем самым закрывая канал и устанавливая состояние прерывания текущего потока -
UnresolvedAddressException- Если заданный удаленный адрес является InetSocketAddress, который не полностью разрешен -
UnsupportedAddressTypeException- Если тип заданного удаленного адреса не поддерживается -
IOException- Если произошла какая-либо другая ошибка ввода-вывода
finishConnect
public abstract boolean finishConnect() throws IOException
Операция подключения в режиме без ожидания инициируется путем перевода сокета канала в режим без ожидания, а затем вызова его метода connect. После того, как подключение будет установлено или попытка не удалась, сокет канала станет доступным для подключения, и этот метод может быть вызван для завершения последовательности подключения. Если операция подключения не удалась, то вызов этого метода вызовет соответствующее исключение IOException.
Если этот канал уже подключен, то этот метод не будет блокировать выполнение и сразу же вернет true. Если этот канал находится в режиме без ожидания, то этот метод вернет false, если процесс подключения еще не завершен. Если этот канал находится в блокирующем режиме, то этот метод будет блокировать выполнение до тех пор, пока подключение не будет завершено или не произойдет сбой, и всегда вернет либо true, либо сгенерирует проверяемое исключение, описывающее сбой.
Этот метод можно вызывать в любое время. Если операция чтения или записи на этом канале вызывается во время выполнения вызова этого метода, то эта операция сначала заблокируется до завершения этого вызова. Если попытка подключения не удалась, то есть, если вызов этого метода генерирует проверяемое исключение, то канал будет закрыт.
- Возвращает:
-
true, если и только если сокет этого канала теперь подключен - Изначает исключение:
-
NoConnectionPendingException- Если этот канал не подключен и операция подключения не была инициирована -
ClosedChannelException- Если этот канал закрыт -
AsynchronousCloseException- Если другой поток закрывает этот канал во время операции подключения -
ClosedByInterruptException- Если другой поток прерывает текущий поток во время операции подключения, тем самым закрывая канал и устанавливая состояние прерывания текущего потока -
IOException- Если произошла какая-либо другая ошибка ввода-вывода
getRemoteAddress
public abstract SocketAddress getRemoteAddress() throws IOException
Если сокет канала связан и подключен к адресу сокета протокола Интернета, то возвращаемое значение имеет тип InetSocketAddress.
Если сокет канала связан и подключен к адресу сокета Unix Domain, то возвращаемый адрес является UnixDomainSocketAddress.
- Возвращает:
- Удаленный адрес;
null, если сокет канала не подключен - Изначает исключение:
-
ClosedChannelException- Если канал закрыт -
IOException- Если произошла ошибка ввода-вывода - С момента:
- 1.7
read
public abstract int read(ByteBuffer dst) throws IOException
ReadableByteChannel Производится попытка чтения до r байтов из канала, где r — количество оставшихся байтов в буфере, то есть, dst.remaining(), в момент вызова этого метода.
Предположим, что прочитана последовательность байтов длиной n, где 0 <= n <= r. Эта последовательность байтов будет перенесена в буфер таким образом, что первый байт в последовательности будет по индексу p, а последний байт — по индексу p + n - 1, где p — позиция буфера в момент вызова этого метода. После возврата позиция буфера будет равна p + n; его предел не изменится.
Операция чтения может не заполнить буфер, и, фактически, может вообще не прочитать никаких байтов. Будет ли это сделано, зависит от характера и состояния канала. Например, сокетный канал в режиме без ожидания не может прочитать больше байтов, чем немедленно доступно из буфера ввода сокета; аналогично, файл-канал не может прочитать больше байтов, чем остается в файле. Однако гарантируется, что если канал находится в блокирующем режиме, и в буфере остается хотя бы один байт, то этот метод будет блокировать выполнение до тех пор, пока не будет прочитан по крайней мере один байт.
Этот метод можно вызывать в любое время. Однако, если другой поток уже инициировал операцию чтения на этом канале, то вызов этого метода будет блокировать выполнение, пока первая операция не завершится.
- Указано в:
-
readв интерфейсеReadableByteChannel - Параметры:
-
dst- буфер, в который будут перенесены байты - Возвращает:
- Количество прочитанных байтов, возможно ноль, или
-1, если канал достиг конца потока - Изначает исключение:
-
NotYetConnectedException- Если этот канал еще не подключен -
ClosedChannelException- Если этот канал закрыт -
AsynchronousCloseException- Если другой поток закрывает этот канал во время операции чтения -
ClosedByInterruptException- Если другой поток прерывает текущий поток во время операции чтения, тем самым закрывая канал и устанавливая состояние прерывания текущего потока -
IOException- Если произошла какая-либо другая ошибка ввода-вывода
чтение
public abstract long read(ByteBuffer[] dsts, int offset, int length) throws IOException
ScatteringByteChannelВызов этого метода пытается прочитать до 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] и так далее, пока вся последовательность байтов не будет передана в указанные буферы. В каждый буфер передаётся как можно больше байтов, поэтому конечная позиция каждого обновлённого буфера, кроме последнего обновлённого буфера, гарантированно равна пределу этого буфера.
Этот метод может быть вызван в любое время. Однако, если другой поток уже инициировал операцию чтения в этом канале, вызов этого метода будет заблокирован до завершения первой операции.
- Указано в:
-
readв интерфейсеScatteringByteChannel - Параметры:
-
dsts— буферы, в которые будут передаваться байты -
offset— смещение в массиве буферов первого буфера, в который будут передаваться байты; должно быть неотрицательным и не большеdsts.length -
length— максимальное количество буферов для доступа; должно быть неотрицательным и не большеdsts.length—offset - Возвращает:
- Количество прочитанных байтов, возможно ноль, или
-1, если канал достиг конца потока - Исключения:
-
NotYetConnectedException— если этот канал ещё не подключён -
ClosedChannelException— если этот канал закрыт -
AsynchronousCloseException— если другой поток закрывает этот канал во время выполнения операции чтения -
ClosedByInterruptException— если другой поток прерывает текущий поток во время выполнения операции чтения, тем самым закрывая канал и устанавливая статус прерывания текущего потока -
IOException— если произошла какая-либо другая ошибка ввода-вывода
чтение
public final long read(ByteBuffer[] dsts) throws IOException
ScatteringByteChannel Вызов этого метода вида c.read(dsts) ведет себя точно так же, как вызов
c.read(dsts, 0, dsts.length);
- Указано в:
-
readв интерфейсеScatteringByteChannel - Параметры:
-
dsts— буферы, в которые будут передаваться байты - Возвращает:
- Количество прочитанных байтов, возможно ноль, или
-1, если канал достиг конца потока - Исключения:
-
NotYetConnectedException— если этот канал ещё не подключён -
ClosedChannelException— если этот канал закрыт -
AsynchronousCloseException— если другой поток закрывает этот канал во время выполнения операции чтения -
ClosedByInterruptException— если другой поток прерывает текущий поток во время выполнения операции чтения, тем самым закрывая канал и устанавливая статус прерывания текущего потока -
IOException— если произошла какая-либо другая ошибка ввода-вывода
запись
public abstract int write(ByteBuffer src) throws IOException
WritableByteChannel Пытается записать до r байтов в канал, где r — количество оставшихся байтов в буфере, то есть src.remaining(), в момент вызова этого метода.
Предположим, что записана последовательность байтов длиной n, где 0 <= n <= r. Эта последовательность байтов будет передана из буфера, начиная с индекса p, где p — позиция буфера в момент вызова этого метода; индекс последнего записанного байта будет p + n - 1. После возврата позиция буфера будет равна p + n; его предел не изменится.
Если не указано иное, операция записи вернётся только после записи всех r запрошенных байтов. Некоторые типы каналов, в зависимости от их состояния, могут записать только часть байтов или вообще не записать ни одного. Например, сокет-канал в режиме без блокировки не может записать больше байтов, чем свободно в выходном буфере сокета.
Этот метод может быть вызван в любое время. Однако, если другой поток уже инициировал операцию записи в этот канал, вызов этого метода будет заблокирован до завершения первой операции.
- Указано в:
-
writeв интерфейсеWritableByteChannel - Параметры:
-
src— буфер, из которого будут извлекаться байты - Возвращает:
- Количество записанных байтов, возможно ноль
- Исключения:
-
NotYetConnectedException— если этот канал ещё не подключён -
ClosedChannelException— если этот канал закрыт -
AsynchronousCloseException— если другой поток закрывает этот канал во время выполнения операции записи -
ClosedByInterruptException— если другой поток прерывает текущий поток во время выполнения операции записи, тем самым закрывая канал и устанавливая статус прерывания текущего потока -
IOException— если произошла какая-либо другая ошибка ввода-вывода
запись
public abstract long write(ByteBuffer[] srcs, int offset, int length) throws IOException
GatheringByteChannelПытается записать до 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 запрошенных байтов. Некоторые типы каналов, в зависимости от их состояния, могут записать только часть байтов или вообще не записать ни одного. Например, сокет-канал в режиме без блокировки не может записать больше байтов, чем свободно в выходном буфере сокета.
Этот метод может быть вызван в любое время. Однако, если другой поток уже инициировал операцию записи в этот канал, вызов этого метода будет заблокирован до завершения первой операции.
- Указано в:
-
writeв интерфейсеGatheringByteChannel - Параметры:
-
srcs— буферы, из которых будут извлекаться байты -
offset— смещение в массиве буферов первого буфера, из которого будут извлекаться байты; должно быть неотрицательным и не большеsrcs.length -
length— максимальное количество буферов для доступа; должно быть неотрицательным и не большеsrcs.length—offset - Возвращает:
- Количество записанных байтов, возможно ноль
- Исключения:
-
NotYetConnectedException— если этот канал ещё не подключён -
ClosedChannelException— если этот канал закрыт -
AsynchronousCloseException— если другой поток закрывает этот канал во время выполнения операции записи -
ClosedByInterruptException— если другой поток прерывает текущий поток во время выполнения операции записи, тем самым закрывая канал и устанавливая статус прерывания текущего потока -
IOException— если произошла какая-либо другая ошибка ввода-вывода
запись
public final long write(ByteBuffer[] srcs) throws IOException
GatheringByteChannel Вызов этого метода вида c.write(srcs) ведет себя точно так же, как вызов
c.write(srcs, 0, srcs.length);
- Указано в:
-
writeв интерфейсеGatheringByteChannel - Параметры:
-
srcs— буферы, из которых будут извлекаться байты - Возвращает:
- Количество записанных байтов, возможно ноль
- Исключения:
-
NotYetConnectedException— если этот канал ещё не подключён -
ClosedChannelException— если этот канал закрыт -
AsynchronousCloseException— если другой поток закрывает этот канал во время выполнения операции записи -
ClosedByInterruptException— если другой поток прерывает текущий поток во время выполнения операции записи, тем самым закрывая канал и устанавливая статус прерывания текущего потока -
IOException— если произошла какая-либо другая ошибка ввода-вывода
getLocalAddress
public abstract SocketAddress getLocalAddress() throws IOException
Если канал привязан к адресу сокета протокола Интернета, то возвращаемое значение этого метода имеет тип InetSocketAddress.
Если канал привязан к адресу сокета доменной Unix-системы, то адрес сокета является UnixDomainSocketAddress.
- Specified by:
-
getLocalAddressв интерфейсеNetworkChannel - Returns:
- Адрес, к которому привязан сокет;
null, если сокет канала не привязан - Throws:
-
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.
https://download.java.net/java/early_access/jdk24/docs/api/java.base/java/nio/channels/SocketChannel.html