Spec-Zone.ru › OpenJDK 21

Класс 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 этого класса. Метод 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

Краткое описание конструкторов

SocketChannel(SelectorProvider provider)
Модификатор Конструктор Описание
protected
Инициализирует новый экземпляр этого класса.

Краткое описание методов

Модификатор и тип Метод Описание
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(ProtocolFamily family)
Открывает сокетный канал.
static SocketChannel open(SocketAddress remote)
Открывает сокетный канал и подключает его к удаленному адресу.
abstract int read(ByteBuffer dst)
Считывает последовательность байтов из этого канала в предоставленный буфер.
final 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()
Получает сокет, связанный с этим каналом.
final int validOps()
Возвращает набор операций, определяющий поддерживаемые операции этого канала.
abstract int write(ByteBuffer src)
Записывает последовательность байтов в этот канал из предоставленного буфера.
final 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

isOpen

Методы, объявленные в интерфейсе java.nio.channels.NetworkChannel

getOption, supportedOptions

Подробное описание конструкторов

SocketChannel

protected SocketChannel(SelectorProvider provider)
Инициализирует новый экземпляр этого класса.
Параметры:
provider - Предоставление, которое создало этот канал

Подробное описание методов

open

public static SocketChannel open() throws IOException
Открывает сокет-канал для сокета протокола Интернета.

Новый канал создается путем вызова метода openSocketChannel системного глобального объекта по умолчанию SelectorProvider.

Возвращает:
Новый сокет-канал
Исключения:
IOException - Если произошла ошибка ввода-вывода
См. также:
  • системное свойство java.net.preferIPv4Stack

open

public static SocketChannel open(ProtocolFamily family) throws IOException
Открывает сокет-канал. Параметр family задает protocol family сокета канала.

Новый канал создается путем вызова метода openSocketChannel(ProtocolFamily) системного глобального объекта по умолчанию. SelectorProvider объекта.

Параметры:
family - Семейство протоколов
Возвращает:
Новый сокет-канал
Исключения:
UnsupportedOperationException - Если указанное семейство протоколов не поддерживается. Например, предположим, что параметр задан как StandardProtocolFamily.INET6, но IPv6 не включен на платформе.
IOException - Если произошла ошибка ввода-вывода
С:
15
См. также:
  • системное свойство java.net.preferIPv4Stack

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 - Если произошла какая-либо другая ошибка ввода-вывода
См. также:
  • системное свойство java.net.preferIPv4Stack

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
См. также:
  • 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()
Получает сокет, связанный с этим каналом.
Возвращает:
Сокет, связанный с этим каналом
Исключение:
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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API