Spec-Zone.ru › OpenJDK 24

Класс Connection

java.lang.Object
com.sun.jdi.connect.spi.Connection
public abstract class Connection extends Object
Соединение между отладчиком и целевой виртуальной машиной, которую он отлаживает.

Connection представляет двунаправленный канал связи между отладчиком и целевой виртуальной машиной. Соединение создается, когда TransportService устанавливает соединение и успешно выполняет рукопожатие с целевой виртуальной машиной. Реализация TransportService обеспечивает надежную службу транспортировки пакетов JDWP, а следовательно, Connection обеспечивает надежный поток пакетов JDWP между отладчиком и целевой виртуальной машиной. Соединение ориентировано на поток, то есть пакеты JDWP, записанные в соединение, считываются целевой виртуальной машиной в том порядке, в котором они были записаны. Аналогично, пакеты, записанные в Connection целевой виртуальной машиной, считываются отладчиком в том порядке, в котором они были записаны.

Соединение может быть открытым или закрытым. Оно открыто при создании и остается открытым до закрытия. После закрытия оно остается закрытым, и любая попытка выполнить операцию ввода-вывода приведет к сбрасыванию ClosedConnectionException. Соединение можно проверить, вызвав метод isOpen.

Соединение безопасно для доступа с нескольких потоков одновременно, хотя в любой момент времени только один поток может читать, и только один поток может писать.

Since:
1.5

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

Конструктор Описание
Connection()
Конструктор для вызова подклассами.

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

Модификатор и тип Метод Описание
abstract void close()
Закрывает это соединение.
abstract boolean isOpen()
Указывает, открыто ли это соединение.
abstract byte[] readPacket()
Считывает пакет из целевой виртуальной машины.
abstract void writePacket(byte[] pkt)
Записывает пакет в целевую виртуальную машину.

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

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

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

Connection

public Connection()
Конструктор для вызова подклассами.

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

readPacket

public abstract byte[] readPacket() throws IOException
Считывает пакет из целевой виртуальной машины.

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

Чтение пакета не выполняет проверки целостности пакета, кроме проверки, что длина пакета (как указано значением поля length, первые четыре байта пакета) составляет 11 или более байтов. Если значение length меньше 11, то генерируется исключение IOException.

Возвращает массив байтов длиной, равной длине полученного пакета, или массив байтов длиной 0, когда встречается конец потока. Если конец потока встречается после того, как были прочитаны некоторые, но не все байты пакета, это считается ошибкой ввода-вывода, и генерируется исключение IOException. Первый байт пакета хранится в элементе 0 массива байтов, второй - в элементе 1 и так далее. Байты в массиве байтов выстраиваются в соответствии со спецификацией JDWP. То есть все поля в пакете имеют порядок big endian, как указано в спецификации JDWP.

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

Returns:
пакет, прочитанный из целевой виртуальной машины
Throws:
ClosedConnectionException - Если соединение закрыто или другой поток закрывает соединение во время выполнения readPacket.
IOException - Если длина пакета (как указано первыми 4 байтами) меньше 11 байтов или произошла ошибка ввода-вывода.

writePacket

public abstract void writePacket(byte[] pkt) throws IOException
Записывает пакет в целевую виртуальную машину.

Попытка записать или отправить пакет JDWP в целевую виртуальную машину. Операция записи возвращается только после записи всего пакета в целевую виртуальную машину. Запись всего пакета не означает, что весь пакет был передан целевой виртуальной машине, а только что все байты были записаны в службу транспортировки. Служба транспортировки, основанная на соединении TCP/IP, например, может буферизовать часть или весь пакет перед передачей по сети.

Массив байтов, предоставленный этому методу, должен быть выстроен в соответствии со спецификацией JDWP. То есть все поля в пакете расположены в порядке big endian. Первый байт, то есть элемент pkt[0], является первым байтом поля length. pkt[1] является вторым байтом поля length и так далее.

Запись пакета не выполняет проверок целостности пакета, кроме проверки длины пакета. Проверка длины пакета требует проверки, что значение поля length (как указано первыми четырьмя байтами пакета) равно или больше 11. Следовательно, длина предоставленного массива байтов, то есть pkt.length, должна быть 11 или больше и должна быть равна или больше значения поля length. Если длина массива байтов больше значения поля length, то все байты с элемента pkt[length] и далее игнорируются. Другими словами, любые дополнительные байты, следующие за пакетом в массиве байтов, игнорируются и не будут переданы целевой виртуальной машине.

Операция записи может заблокироваться или завершиться немедленно. Точные обстоятельства, при которых операция блокируется, зависят от службы транспортировки. В случае соединения TCP/IP с целевой виртуальной машиной метод writePacket может заблокироваться, если есть перегрузка сети или недостаточно места для буферизации пакета в подлежащей системе сети.

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

Parameters:
pkt - Пакет, который нужно записать в целевую виртуальную машину.
Throws:
ClosedConnectionException - Если соединение закрыто или другой поток закрывает соединение во время операции записи.
IOException - Если произошла ошибка ввода-вывода.
IllegalArgumentException - Если значение поля length некорректно или массив байтов имеет недостаточную длину.

close

public abstract void close() throws IOException
Закрывает это соединение.

Если соединение уже закрыто, вызов этого метода не имеет эффекта. После закрытия соединения любые дальнейшие вызовы readPacket или writePacket сгенерируют ClosedConnectionException.

Любой поток, который в настоящее время заблокирован в операции ввода-вывода (readPacket или writePacket), сгенерирует ClosedConnectionException.

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

Throws:
IOException - Если произошла ошибка ввода-вывода

isOpen

public abstract boolean isOpen()
Указывает, открыто ли это соединение.
Returns:
true, если и только если это соединение открыто

© 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://download.java.net/java/early_access/jdk24/docs/api/jdk.jdi/com/sun/jdi/connect/spi/Connection.html

Spec-Zone.ru

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