Класс 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 | Отключение алгоритма Нагла |
Каналы сокетов безопасны для использования в нескольких потоках одновременно. Они поддерживают одновременное чтение и запись, хотя в любой момент времени может быть только один поток чтения и один поток записи. Методы 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
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.Channel
close, 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- Если произошла ошибка ввода-вывода - Since:
- 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 к адресу сокета протокола Интернета, то возвращаемое значение этого метода имеет тип InetSocketAddress.
Если установлен менеджер безопасности, его метод 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.