Класс Connection
public abstract class Connection extends Object
Connection представляет собой двунаправленный канал связи между отладчиком и целевой виртуальной машиной. Connection создается, когда TransportService устанавливает соединение и успешно выполняет рукопожатие с целевой виртуальной машиной. Реализация TransportService предоставляет надежную службу передачи пакетов JDWP и, следовательно, Connection обеспечивает надежный поток пакетов JDWP между отладчиком и целевой виртуальной машиной. Connection ориентирован на потоки: пакеты JDWP, записанные в соединение, считываются целевой виртуальной машиной в том порядке, в котором они были записаны. Аналогично, пакеты, записанные в Connection целевой виртуальной машиной, считываются отладчиком в порядке их записи.
Соединение может быть открытым или закрытым. При создании оно открыто и остается открытым до закрытия. После закрытия оно остается закрытым, а любая попытка выполнить над ним операцию ввода-вывода приводит к выбросу исключения ClosedConnectionException. Проверить состояние соединения можно с помощью метода isOpen.
Connection допускает безопасный доступ из нескольких одновременно работающих потоков, однако в любой момент времени читать может не более одного потока, а записывать — не более одного потока.
- Начиная с:
- 1.5
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
Connection() |
Конструктор для вызова из подклассов. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
abstract void |
close() |
Закрывает это соединение. |
abstract boolean |
isOpen() |
Сообщает, открыто ли это соединение. |
abstract byte[] |
readPacket() |
Считывает пакет из целевой виртуальной машины. |
abstract void |
writePacket |
Записывает пакет в целевую виртуальную машину. |
Методы, объявленные в классе Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait | Модификатор и тип | Метод | Описание |
|---|---|---|
protected Object |
clone() |
Создает и возвращает копию этого объекта. |
boolean |
equals |
Указывает, равен ли другой объект этому объекту. |
protected void |
finalize() |
Устарело, будет удалено: этот элемент API может быть удален в одной из будущих версий. Финализация устарела и может быть удалена в одном из будущих выпусков. |
final Class |
getClass() |
Возвращает класс времени выполнения этого Object. |
int |
hashCode() |
Возвращает хеш-код этого объекта. |
final void |
notify() |
Пробуждает один поток, ожидающий на мониторе этого объекта. |
final void |
notifyAll() |
Пробуждает все потоки, ожидающие на мониторе этого объекта. |
String |
toString() |
Возвращает строковое представление объекта. |
final void |
wait() |
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания, либо истечения заданного промежутка реального времени. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания, либо истечения заданного промежутка реального времени. |
Подробное описание конструкторов
Connection
public Connection()
Подробное описание методов
readPacket
public abstract byte[] readPacket() throws IOException
Предпринимает попытку считать пакет JDWP из целевой виртуальной машины. Операция чтения может блокироваться неограниченно долго и завершается только после считывания всех байтов пакета или, в случае службы передачи данных, основанной на потоковом протоколе связи, при достижении конца потока.
При чтении пакета проверка целостности не выполняется, за исключением проверки того, что длина пакета (указанная значением поля length, состоящего из первых четырех байтов пакета) составляет не менее 11 байтов. Если значение length меньше 11, выбрасывается исключение IOException.
Возвращает массив байтов длиной, равной длине полученного пакета, или массив байтов длиной 0 при достижении конца потока. Если конец потока достигнут после считывания некоторых, но не всех байтов пакета, это считается ошибкой ввода-вывода, и выбрасывается исключение IOException. Первый байт пакета сохраняется в элементе 0 массива байтов, второй — в элементе 1 и так далее. Байты в массиве расположены в соответствии со спецификацией JDWP. То есть все поля пакета представлены в порядке от старшего байта к младшему, как указано в спецификации JDWP.
Этот метод можно вызывать в любое время. Если другой поток уже начал выполнять операцию readPacket для этого соединения, вызов данного метода будет заблокирован до завершения первой операции.
- Возвращает:
- пакет, считанный из целевой виртуальной машины
- Выбрасывает:
-
ClosedConnectionException— если соединение закрыто или другой поток закрывает соединение во время выполнения readPacket. -
IOException— если длина пакета (указанная первыми 4 байтами) меньше 11 байтов или произошла ошибка ввода-вывода.
writePacket
public abstract void writePacket(byte[] pkt) throws IOException
Предпринимает попытку записать или отправить пакет JDWP в целевую виртуальную машину. Операция записи завершается только после записи всего пакета в целевую виртуальную машину. Запись всего пакета не означает, что весь пакет был передан целевой виртуальной машине, а лишь то, что все байты были записаны в службу передачи данных. Например, служба передачи данных, основанная на TCP/IP-соединении, может буферизировать часть пакета или весь пакет перед его передачей по сети.
Массив байтов, передаваемый этому методу, должен быть организован в соответствии со спецификацией JDWP. То есть все поля пакета должны быть представлены в порядке от старшего байта к младшему. Первый байт, то есть элемент 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, 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.