Класс SocketChannel
- java.lang.Object
-
- java.nio.channels.spi.AbstractInterruptibleChannel
-
- java.nio.channels.SelectableChannel
-
- java.nio.channels.spi.AbstractSelectableChannel
-
- java.nio.channels.SocketChannel
- Все реализуемые интерфейсы:
-
Closeable,AutoCloseable,ByteChannel,Channel,GatheringByteChannel,InterruptibleChannel,NetworkChannel,ReadableByteChannel,ScatteringByteChannel,WritableByteChannel
public abstract class SocketChannel extends AbstractSelectableChannel implements ByteChannel, ScatteringByteChannel, GatheringByteChannel, NetworkChannel
Выбираемый канал для сокетов с потоковым соединением.
Канал сокета создается путем вызова одного из методов open этого класса. Невозможно создать канал для произвольного существующего сокета. Новый созданный канал сокета открыт, но еще не подключен. Попытка вызвать операцию ввода-вывода на отключенном канале приведет к сбросу NotYetConnectedException. Канал сокета можно подключить, вызвав его метод connect; после подключения, канал сокета остается подключенным до его закрытия. Подключен ли канал сокета, можно определить, вызвав его метод isConnected.
Канал сокета поддерживает неблокирующее подключение: Канал сокета можно создать, и процесс установления соединения с удаленным сокетом можно начать с помощью метода connect для последующего завершения методом finishConnect. В процессе ли операция подключения можно определить, вызвав метод isConnectionPending.
Канал сокета поддерживает асинхронное закрытие, которое аналогично асинхронной операции закрытия, указанной в классе Channel. Если входная сторона сокета закрывается одной нитью, в то время как другая нить заблокирована в операции чтения на канале сокета, то операция чтения в заблокированной нити завершится без чтения каких-либо байтов и вернет -1. Если выходная сторона сокета закрывается одной нитью, в то время как другая нить заблокирована в операции записи на канале сокета, то заблокированная нить получит AsynchronousCloseException.
Параметры сокета настраиваются с помощью метода setOption. Канал сокета поддерживает следующие параметры:
| Имя параметра | Описание |
|---|---|
SO_SNDBUF | Размер буфера отправки сокета |
SO_RCVBUF | Размер буфера приема сокета |
SO_KEEPALIVE | Поддерживать соединение активным |
SO_REUSEADDR | Повторное использование адреса |
SO_LINGER | Задержка при закрытии, если данные присутствуют (только при настройке в блокирующем режиме) |
TCP_NODELAY | Отключить алгоритм Nagle |
Каналы сокетов безопасны для использования несколькими параллельными потоками. Они поддерживают одновременное чтение и запись, хотя в любой момент может происходить чтение только одного потока и запись только одного потока. Методы connect и finishConnect взаимно синхронизируются друг с другом, и попытка инициировать операцию чтения или записи во время выполнения одного из этих методов заблокирует выполнение до завершения вызова.
- С момента:
- 1.4
Конструкторы
| Модификатор | Конструктор | Описание |
|---|---|---|
protected | SocketChannel(SelectorProvider provider) | Инициализирует новый экземпляр этого класса. |
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
abstract SocketChannel | bind(SocketAddress local) | Привязывает сокет канала к локальному адресу. |
abstract boolean | connect(SocketAddress remote) | Подключает сокет этого канала. |
abstract boolean | finishConnect() | Завершает процесс подключения канала сокета. |
abstract SocketAddress | getLocalAddress() | Возвращает адрес сокета, к которому привязан сокет этого канала. |
abstract SocketAddress | getRemoteAddress() | Возвращает удаленный адрес, к которому подключен сокет этого канала. |
abstract boolean | isConnected() | Указывает, подключен ли сетевой сокет этого канала. |
abstract boolean | isConnectionPending() | Указывает, происходит ли операция подключения на этом канале. |
static SocketChannel | open() | Открывает канал сокета. |
static SocketChannel | open(SocketAddress remote) | Открывает канал сокета и подключает его к удаленному адресу. |
abstract int | read(ByteBuffer dst) | Считывает последовательность байтов из этого канала в указанный буфер. |
long | read(ByteBuffer[] dsts) | Считывает последовательность байтов из этого канала в заданные буферы. |
abstract long | read(ByteBuffer[] dsts,
int offset,
int length) | Считывает последовательность байтов из этого канала в подпоследовательность заданных буферов. |
abstract <T> SocketChannel | setOption(SocketOption<T> name,
T value) | Устанавливает значение параметра сокета. |
abstract SocketChannel | shutdownInput() | Закрывает соединение для чтения без закрытия канала. |
abstract SocketChannel | shutdownOutput() | Закрывает соединение для записи без закрытия канала. |
abstract Socket | socket() | Возвращает сокет, связанный с этим каналом. |
int | validOps() | Возвращает набор операций, определяющий поддерживаемые операции этого канала. |
abstract int | write(ByteBuffer src) | Записывает последовательность байтов в этот канал из заданного буфера. |
long | write(ByteBuffer[] srcs) | Записывает последовательность байтов в этот канал из заданных буферов. |
abstract long | write(ByteBuffer[] srcs,
int offset,
int length) | Записывает последовательность байтов в этот канал из подпоследовательности заданных буферов. |
Методы, объявленные в классе java.nio.channels.spi.AbstractSelectableChannel
configureBlocking, implCloseChannel, implCloseSelectableChannel, implConfigureBlocking, provider, register Методы, объявленные в классе java.nio.channels.SelectableChannel
blockingLock, isBlocking, isRegistered, keyFor, register Методы, объявленные в классе java.nio.channels.spi.AbstractInterruptibleChannel
begin, close, end Методы, объявленные в классе java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait Методы, объявленные в интерфейсе java.nio.channels.Channel
isOpen Методы, объявленные в интерфейсе 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(SocketAddress remote)
throws IOException Открывает сокет-канал и подключает его к удалённому адресу.
Этот удобный метод работает как если бы он вызывал метод open(), вызывал метод connect для полученного сокет-канала, передавая ему remote, а затем возвращал этот канал.
- Параметры:
-
remote- Удалённый адрес, к которому должен быть подключён новый канал - Возвращает:
- Новый подключённый сокет-канал
- Исключение:
-
AsynchronousCloseException- Если другой поток закрывает этот канал во время выполнения операции подключения -
ClosedByInterruptException- Если другой поток прерывает текущий поток во время выполнения операции подключения, тем самым закрывая канал и устанавливая статус прерывания текущего потока -
UnresolvedAddressException- Если заданный удалённый адрес не полностью разрешен -
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 Описание скопировано из интерфейса: NetworkChannel
Связывает сокет канала с локальным адресом.
Этот метод используется для установления связи между сокетом и локальным адресом. После установления связи сокет остаётся связанным до закрытия канала. Если параметр local имеет значение null, сокет будет связан с автоматически назначаемым адресом.
- Установлено в:
-
bindв интерфейсеNetworkChannel - Параметры:
-
local- Адрес для связывания сокета, илиnullдля связывания сокета с автоматически назначенным адресом сокета - Возвращает:
- Этот канал
- Исключение:
-
ConnectionPendingException- Если уже выполняется неблокирующая операция подключения к этому каналу -
AlreadyBoundException- Если сокет уже связан -
UnsupportedAddressTypeException- Если тип заданного адреса не поддерживается -
ClosedChannelException- Если канал закрыт -
IOException- Если произошла какая-либо другая ошибка ввода-вывода -
SecurityException- Если установлен менеджер безопасности и его методcheckListenотклоняет операцию - С:
- 1.7
- См. также:
NetworkChannel.getLocalAddress()
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
- См. также:
StandardSocketOptions
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()
Возвращает сокет, связанный с этим каналом.
Возвращаемый объект не будет объявлять никаких публичных методов, которые не объявлены в классе Socket.
- Возвращает:
- Сокет, связанный с этим каналом
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 подключение к адресу и номеру порта заданного удалённого узла.
Этот метод может быть вызван в любое время. Если операция чтения или записи на этом канале вызывается во время выполнения вызова этого метода, то эта операция сначала будет блокироваться до завершения этого вызова. Если попытка подключения началась, но не удалась, то есть если вызов этого метода сгенерировал проверяемое исключение, канал будет закрыт.
- Параметры:
-
remote- Удалённый адрес, к которому должен быть подключен этот канал - Возвращает:
-
trueесли подключение было установлено,falseесли этот канал находится в режиме без блокировки, и операция подключения выполняется - Исключение:
-
AlreadyConnectedException- Если этот канал уже подключен -
ConnectionPendingException- Если уже выполняется неблокирующая операция подключения к этому каналу -
ClosedChannelException- Если этот канал закрыт -
AsynchronousCloseException- Если другой поток закрывает этот канал во время выполнения операции подключения -
ClosedByInterruptException- Если другой поток прерывает текущий поток во время выполнения операции подключения, тем самым закрывая канал и устанавливая статус прерывания текущего потока -
UnresolvedAddressException- Если заданный удалённый адрес не полностью разрешен -
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.
- Возвращает:
- Удаленный адрес;
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- Если произошла другая ошибка ввода-вывода
read
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- Если произошла другая ошибка ввода-вывода
read
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- Если произошла другая ошибка ввода-вывода
write
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- Если произошла другая ошибка ввода-вывода
write
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- Если произошла другая ошибка ввода-вывода
write
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 к адресу сокета Интернет-протокола, то возвращаемое значение этого метода является типа checkConnect.
Если установлен менеджер безопасности, вызывается его метод checkConnect с локальным адресом и -1 в качестве аргументов, чтобы проверить, разрешена ли операция. Если операция не разрешена, возвращается SocketAddress , представляющий loopback адрес и локальный порт сокета канала.
- Определено:
-
getLocalAddressв интерфейсеNetworkChannel - Возвращает:
- Адрес
SocketAddress, к которому привязан сокет, илиSocketAddress, представляющий адрес обратной связи, если это запрещено менеджером безопасности, илиnull, если сокет канала не привязан - Изводит исключение:
-
ClosedChannelException- Если канал закрыт -
IOException- Если произошла ошибка ввода-вывода
© 1993, 2020, 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/11/docs/api/java.base/java/nio/channels/SocketChannel.html