Spec-Zone.ru › OpenJDK 27

Класс 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. Сокетные каналы для сокетов интернет-протокола поддерживают следующие параметры:

Socket options
Имя параметра Описание
SO_SNDBUF Размер буфера отправки сокета
SO_RCVBUF Размер буфера приёма сокета
SO_KEEPALIVE Поддержание соединения в активном состоянии
SO_REUSEADDR Повторное использование адреса
SO_LINGER Ожидание при закрытии, если имеются данные (только при блокирующем режиме)
TCP_NODELAY Отключение алгоритма Нейгла

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

Socket options
Имя параметра Описание
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
Модификатор и тип Метод Описание
final Object blockingLock()
Возвращает объект, на котором синхронизируются методы configureBlocking и register.
final SelectableChannel configureBlocking(boolean block)
Изменяет режим блокировки этого канала.
protected final void implCloseChannel()
Закрывает этот канал.
protected abstract void implCloseSelectableChannel()
Закрывает этот выбираемый канал.
protected abstract void implConfigureBlocking(boolean block)
Изменяет режим блокировки этого канала.
final boolean isBlocking()
Показывает, будет ли каждая операция ввода-вывода в этом канале блокироваться до её завершения.
final boolean isRegistered()
Показывает, зарегистрирован ли этот канал в данный момент хотя бы в одном селекторе.
final SelectionKey keyFor(Selector sel)
Возвращает ключ, представляющий регистрацию канала в указанном селекторе.
final SelectorProvider provider()
Возвращает поставщика, создавшего этот канал.
final SelectionKey register(Selector sel, int ops, Object att)
Регистрирует этот канал в указанном селекторе и возвращает ключ выбора.

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

register
Модификатор и тип Метод Описание
final SelectionKey register(Selector sel, int ops)
Регистрирует этот канал в указанном селекторе и возвращает ключ выбора.

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

begin, close, end, isOpen
Модификатор и тип Метод Описание
protected final void begin()
Обозначает начало операции ввода-вывода, которая может блокироваться неопределённо долго.
final void close()
Закрывает этот канал.
protected final void end(boolean completed)
Обозначает окончание операции ввода-вывода, которая может блокироваться неопределённо долго.
final boolean isOpen()
Показывает, открыт ли этот канал.

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

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Модификатор и тип Метод Описание
protected Object clone()
Создаёт и возвращает копию этого объекта.
boolean equals(Object obj)
Показывает, равен ли этот объект другому объекту.
protected void finalize()
Устарело, подлежит удалению: этот элемент API будет удалён в будущей версии.
Финализация объявлена устаревшей и будет удалена в одном из следующих выпусков.
final Class<?> getClass()
Возвращает класс времени выполнения этого Object.
int hashCode()
Возвращает хеш-код этого объекта.
final void notify()
Пробуждает один поток, ожидающий на мониторе этого объекта.
final void notifyAll()
Пробуждает все потоки, ожидающие на мониторе этого объекта.
String toString()
Возвращает строковое представление объекта.
final void wait()
Заставляет текущий поток ожидать пробуждения, обычно посредством уведомления или прерывания.
final void wait(long timeoutMillis)
Заставляет текущий поток ожидать пробуждения, обычно посредством уведомления или прерывания, либо до истечения указанного промежутка реального времени.
final void wait(long timeoutMillis, int nanos)
Заставляет текущий поток ожидать пробуждения, обычно посредством уведомления или прерывания, либо до истечения указанного промежутка реального времени.

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

getOption, supportedOptions
Модификатор и тип Метод Описание
<T> T getOption(SocketOption<T> name)
Возвращает значение параметра сокета.
Set<SocketOption<?>> 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 к адресу сокета протокола Интернета, возвращаемое этим методом значение имеет тип InetSocketAddress.

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

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

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, включая концептуальные обзоры, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторское право © 1993, 2026, 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.

Spec-Zone.ru

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