Класс 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- Если тип заданного удаленного адреса не поддерживается -
SecurityException- Если установлен менеджер безопасности, и он не разрешает доступ к заданному удаленному узлу -
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 создает файл, соответствующий пути к файлу в
UnixDomainSocketAddress. Этот файл сохраняется после закрытия канала, и его необходимо удалить, прежде чем другой сокет сможет привязаться к тому же имени. Если сокет-канал доменного сокета Unix неявно связан путем подключения без предварительного вызова bind, то его сокет является безымянным без соответствующего файла сокета в файловой системе. Если сокет-канал доменного сокета Unix автоматически связан путем вызоваbind(null), это также приводит к безымянному сокету. - Примечание реализации:
- Каждая платформа устанавливает специфичную для реализации максимальную длину имени сокета доменного имени Unix. Это ограничение применяется при привязке канала. Максимальная длина обычно близка к 100 байтам и, как правило, не меньше.
- Параметры:
-
local- Адрес для привязки сокета, илиnullдля привязки сокета к автоматически назначенному адресу сокета - Возвращает:
- Этот канал
- Исключения:
-
ConnectionPendingException- Если неблокирующая операция подключения уже выполняется на этом канале -
AlreadyBoundException- Если сокет уже привязан -
UnsupportedAddressTypeException- Если тип заданного адреса не поддерживается -
ClosedChannelException- Если канал закрыт -
IOException- Если произошла какая-либо другая ошибка ввода-вывода -
SecurityException- Если установлен менеджер безопасности и его методcheckListenотклоняет операцию для адреса сокета протокола Интернета или для адреса сокета доменного имени, если он отклоняетNetPermission("accessUnixDomainSocket"). - С:
- 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.
Если этот канал находится в режиме блокировки, то вызов этого метода будет блокировать выполнение, пока подключение не будет установлено или не произойдет ошибка ввода-вывода.
Для каналов к сокетам протокола Интернета этот метод выполняет точно такие же проверки безопасности, как и класс Socket. То есть, если установлено средство управления безопасностью, этот метод проверяет, что метод checkConnect разрешает подключение к адресу и номеру порта указанного удаленного узла.
Для каналов к сокетам доменной области Unix этот метод проверяет NetPermission
("accessUnixDomainSocket") с помощью метода checkPermission средства управления безопасностью.
Этот метод можно вызывать в любое время. Если операция чтения или записи на этом канале вызывается во время выполнения вызова этого метода, то эта операция сначала будет блокироваться до завершения этого вызова. Если попытка подключения не удалась, то есть если вызов этого метода вызывает проверенное исключение, то канал будет закрыт.
- Параметры:
-
remote- Удаленный адрес, к которому должен быть подключен этот канал - Возвращает:
-
trueесли подключение было установлено,falseесли этот канал находится в режиме без блокировки и операция подключения выполняется - Исключение:
-
AlreadyConnectedException- Если этот канал уже подключен -
ConnectionPendingException- Если операция подключения без блокировки уже выполняется по этому каналу -
ClosedChannelException- Если этот канал закрыт -
AsynchronousCloseException- Если другой поток закрывает этот канал во время выполнения операции подключения -
ClosedByInterruptException- Если другой поток прерывает текущий поток во время выполнения операции подключения, тем самым закрывая канал и устанавливая состояние прерывания текущего потока -
UnresolvedAddressException- Если заданный удаленный адрес является InetSocketAddress, который не полностью разрешен -
UnsupportedAddressTypeException- Если тип заданного удаленного адреса не поддерживается -
SecurityException- Если установлено средство управления безопасностью и оно не разрешает доступ к заданному удаленному узлу -
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, возвращаемый адрес является 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
Если канал bound к адресу сокета Интернет-протокола, то возвращаемое значение этого метода имеет тип InetSocketAddress. Если установлен менеджер безопасности, его метод checkConnect вызывается с локальным адресом и -1 в качестве аргументов, чтобы проверить, разрешена ли операция. Если операция не разрешена, возвращается SocketAddress , представляющий loopback адрес и локальный порт сокета канала.
Если канал привязан к адресу сокета Unix-домена, адрес сокета является UnixDomainSocketAddress. Если установлен менеджер безопасности, вызывается его метод checkPermission с NetPermission
("accessUnixDomainSocket"). Если операция не разрешена, возвращается безымянный UnixDomainSocketAddress.
- Specified by:
-
getLocalAddressв интерфейсеNetworkChannel - Returns:
- Адрес, к которому привязан сокет, или
SocketAddress, представляющий обратный адрес или пустой путь, если это запрещено менеджером безопасности, илиnull, если сокет канала не привязан - Throws:
-
ClosedChannelException- Если канал закрыт -
IOException- Если произошла ошибка ввода-вывода
© 1993, 2023, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/nio/channels/SocketChannel.html