Spec-Zone.ru › OpenJDK 17

Класс Connection

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

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

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

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

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 для этого соединения, то вызов этого метода будет заблокирован до завершения первой операции.

Возвращает:
прочитанный пакет из целевой виртуальной машины
Исключения:
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 может блокироваться, если есть перегрузка сети или недостаточно места для буферизации пакета в подлежащей сетевой системе.

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

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

close

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

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

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

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

Исключения:
IOException - Если произошла ошибка ввода-вывода

isOpen

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

© 1993, 2021, 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/17/docs/api/jdk.jdi/com/sun/jdi/connect/spi/Connection.html

Spec-Zone.ru

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