Spec-Zone.ru › OpenJDK 25

Класс 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 Отключение алгоритма Нагла

Сокетные каналы для сокетов домена Unix поддерживают следующие параметры:

Параметры сокета
Имя параметра Описание
SO_SNDBUF Размер буфера отправки сокета
SO_RCVBUF Размер буфера приема сокета
SO_LINGER Ожидание при закрытии, если имеются данные (только при блокирующем режиме)

Также могут поддерживаться дополнительные параметры (зависящие от реализации).

Сокетные каналы безопасно использовать из нескольких параллельно работающих потоков. Они поддерживают одновременное чтение и запись, однако в каждый момент времени читать может не более одного потока, и записывать — также не более одного потока. Методы connect и finishConnect синхронизированы относительно друг друга; попытка начать операцию чтения или записи во время выполнения одного из этих методов будет блокироваться до завершения его вызова.

Начиная с версии:
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)
Записывает последовательность байтов из подпоследовательности указанных буферов в этот канал.

Методы, объявленные в классе AbstractSelectableChannel

blockingLock, configureBlocking, implCloseChannel, implCloseSelectableChannel, implConfigureBlocking, isBlocking, isRegistered, keyFor, provider, register

Методы, объявленные в классе SelectableChannel

register

Методы, объявленные в классе AbstractInterruptibleChannel

begin, close, end, isOpen

Методы, объявленные в классе Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Методы, объявленные в интерфейсе Channel

isOpen

Методы, объявленные в интерфейсе 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 — если тип указанного удалённого адреса не поддерживается
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 — при возникновении другой ошибки ввода-вывода
Начиная с:
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.

Если канал работает в блокирующем режиме, вызов этого метода будет блокироваться до установления подключения или возникновения ошибки ввода-вывода.

Этот метод можно вызывать в любое время. Однако если во время выполнения вызова этого метода будет вызвана операция чтения или записи для данного канала, эта операция сначала будет заблокирована до завершения текущего вызова. Если попытка подключения инициирована, но завершается неудачно, то есть вызов этого метода выбрасывает проверяемое исключение, канал будет закрыт.

Параметры:
remote — удалённый адрес, к которому необходимо подключить этот канал
Возвращает:
true, если подключение установлено; false, если канал работает в неблокирующем режиме и операция подключения выполняется
Выбрасывает:
AlreadyConnectedException — если этот канал уже подключён
ConnectionPendingException — если на этом канале уже выполняется неблокирующая операция подключения
ClosedChannelException — если этот канал закрыт
AsynchronousCloseException — если другой поток закрывает этот канал во время выполнения операции подключения
ClosedByInterruptException — если другой поток прерывает текущий поток во время выполнения операции подключения, тем самым закрывая канал и устанавливая признак прерывания текущего потока
UnresolvedAddressException — если указанный удалённый адрес является InetSocketAddress, который разрешён не полностью
UnsupportedAddressTypeException — если тип указанного удалённого адреса не поддерживается
IOException — при возникновении другой ошибки ввода-вывода

finishConnect

public abstract boolean finishConnect() throws IOException
Завершает процесс подключения канала сокета.

Неблокирующая операция подключения инициируется переводом канала сокета в неблокирующий режим и последующим вызовом его метода connect. После установления подключения или неудачной попытки канал сокета становится готовым к подключению, и этот метод можно вызвать для завершения процедуры подключения. Если операция подключения завершилась неудачно, вызов этого метода приведёт к выбрасыванию соответствующего IOException.

Если этот канал уже подключён, метод не будет блокироваться и немедленно вернёт true. Если канал работает в неблокирующем режиме, метод вернёт false, если процесс подключения ещё не завершён. Если канал работает в блокирующем режиме, метод будет блокироваться до завершения подключения или его неудачного завершения и всегда либо вернёт true, либо выбросит проверяемое исключение с описанием ошибки.

Этот метод можно вызывать в любое время. Однако если во время выполнения вызова этого метода будет вызвана операция чтения или записи для данного канала, эта операция сначала будет заблокирована до завершения текущего вызова. Если попытка подключения завершается неудачно, то есть вызов этого метода выбрасывает проверяемое исключение, канал будет закрыт.

Возвращает:
true, если и только если сокет этого канала теперь подключён
Выбрасывает:
NoConnectionPendingException — если этот канал не подключён и операция подключения не была инициирована
ClosedChannelException — если этот канал закрыт
AsynchronousCloseException — если другой поток закрывает этот канал во время выполнения операции подключения
ClosedByInterruptException — если другой поток прерывает текущий поток во время выполнения операции подключения, тем самым закрывая канал и устанавливая признак прерывания текущего потока
IOException — при возникновении другой ошибки ввода-вывода

getRemoteAddress

public abstract SocketAddress getRemoteAddress() throws IOException
Возвращает удалённый адрес, к которому подключён сокет этого канала.

Если сокет канала привязан и подключён к адресу сокета интернет-протокола, возвращаемое значение имеет тип InetSocketAddress.

Если сокет канала привязан и подключён к адресу сокета домена Unix, возвращаемый адрес является 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 — при возникновении другой ошибки ввода-вывода

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 привязан к адресу сокета протокола Internet, возвращаемое этим методом значение имеет тип InetSocketAddress.

Если канал привязан к адресу сокета домена Unix, адрес сокета является объектом типа UnixDomainSocketAddress.

Указано в:
getLocalAddress в интерфейсе NetworkChannel
Возвращает:
SocketAddress, к которому привязан сокет; null, если сокет канала не привязан
Вызывает:
ClosedChannelException - Если канал закрыт
IOException - Если происходит ошибка ввода-вывода

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, концептуальные обзоры, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её дочерних компаний в США и других странах.
Авторское право © 1993, 2025, Oracle и/или её дочерние компании, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/nio/channels/SocketChannel.html

Spec-Zone.ru

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