public abstract class Connection extends Object
Соединение представляет двунаправленный канал связи между отладчиком и целевым VM. Соединение создается когда TransportService
устанавливает соединение и успешно квитирования с целевым VM. Реализация TransportService предоставляет надежную пакетную услугу транспортировки JDWP, и следовательно Соединение обеспечивает надежный поток пакетов JDWP между отладчиком и целевым VM. Соединение является потоковым, то есть, пакеты JDWP, записанные соединению, читаются к установленному сроку VM в порядке, в котором они были записаны. Пакеты Similiarly, записанные Соединению к установленному сроку, VM читаются отладчиком в порядке, в котором они были записаны.
Соединение или открыто или закрыто. Это открыто после создания, и остается открытым, пока это не закрывается. После того, как закрытый, это остается закрытым, и любая попытка вызвать работу ввода-вывода на это вызовет a ClosedConnectionException
быть брошенным. Соединение может быть протестировано, вызывая isOpen
метод.
Соединение безопасно для доступа многократными параллельными потоками, хотя самое большее один поток может читать, и самое большее один поток может писать в любой момент времени.
Конструктор и Описание |
---|
Connection() |
Модификатор и Тип | Метод и Описание |
---|---|
abstract void |
close()
Завершения это соединение.
|
abstract boolean |
isOpen()
Говорит, открыто ли это соединение.
|
abstract byte[] |
readPacket()
Читает пакет из целевого VM.
|
abstract void |
writePacket(byte[] pkt)
Пишет пакет в целевой VM.
|
public abstract byte[] readPacket() throws IOException
Попытки считать пакет JDWP из целевого VM. Операция чтения может блокировать неопределенно и только возвращается, когда она читает все байты пакета, или в случае транспортной службы, которая основана на потоковом протоколе связи, с концом потока встречаются.
Чтение пакета не делает никакой целостности, проверяющей пакет кроме проверки, что длина пакета (как обозначено значением поля length, первыми четырьмя байтами пакета) составляет 11 или больше байтов. Если значение значения length является менее тогда 11 тогда, IOException бросается.
Возвращает байтовый массив длины, равной длине полученного пакета, или байтовому массиву длины 0, когда с концом потока встречаются. Если с концом потока встречаются после того, как некоторые, но не все байты пакета, читаются тогда, это считают ошибкой ввода-вывода, и IOException бросается. Первый байт пакета сохранен в элементе 0 байтового массива, второго в элементе 1, и так далее. Байты в байтовом массиве размечаются согласно спецификации JDWP. Таким образом, все поля в пакете находятся в порядке с обратным порядком байтов согласно спецификации JDWP.
В любое время может быть вызван этот метод. Если другой поток уже инициировал a readPacket
на этом соединении тогда вызов этого метода блокирует, пока первая работа не полна.
ClosedConnectionException
- Если соединение закрывается, или другой поток закрывает соединение, в то время как readPacket происходит.IOException
- Если длина пакета (как indictaed на первые 4 байта) составляет меньше чем 11 байтов, или ошибка ввода-вывода происходит.public abstract void writePacket(byte[] pkt) throws IOException
Попытки записать, или передаться, пакет JDWP к целевому VM. Операция записи только возвращается после записи всего пакета к целевому VM. Запись всего пакета не означает, что весь пакет был передан к целевому VM, а скорее что все байты были записаны транспортной службе. Транспортная служба, основанная на соединении TCP/IP, может, например, буферизовать некоторых или весь пакет перед передачей на сети.
Байтовый массив, обеспеченный для этого метода, должен быть размечен согласно спецификации JDWP. Таким образом, все поля в пакете находятся в порядке с обратным порядком байтов. Первый байт, который является элементом pkt[0], является первым байтом поля length. pkt[1] является вторым байтом поля length и так далее.
Запись пакета не делает никакой целостности, проверяющей пакет кроме проверки пакетной длины. Проверка пакетной длины требует проверки, что значение поля length (как обозначено на первые четыре байта пакета) 11 или больше. Следовательно длина байтового массива, обеспеченного для этого метода, который является pkt.length, должна быть 11 или больше, и должна быть равной или больше чем значение поля length. Если длина байтового массива больше чем значение поля length тогда все байты от элемента, pkt[length] вперед игнорируется. Другими словами любые дополнительные байты, которые следуют за пакетом в байтовом массиве, игнорируются и не будут переданы к целевому VM.
Операция записи может блокировать или может сразу завершиться. Точные обстоятельства, когда работа блоки зависит от транспортной службы. В случае соединения TCP/IP с целевым VM writePacket метод может блокировать, если есть сетевая перегрузка или есть недостаточное пространство, чтобы буферизовать пакет в базовой сетевой системе.
В любое время может быть вызван этот метод. Если другой поток уже инициировал операцию записи на это Соединение тогда, последующий вызов этого метода блокирует, пока первая работа не полна.
pkt
- Пакет, чтобы записать в целевой VM.ClosedConnectionException
- Если соединение закрывается, или другой поток закрывает соединение, в то время как операция записи происходит.IOException
- Если ошибка ввода-вывода происходит.IllegalArgumentException
- Если значение поля length недопустимо, или байтовый массив имеет недостаточную длину.public abstract void close() throws IOException
Если соединение уже закрывается, затем вызывая этот метод, не имеет никакого эффекта. После того, как соединение закрывается, дальше делайте попытку звонков readPacket
или writePacket
бросит a ClosedConnectionException
.
Любой поток, в настоящий момент блокированный в работе ввода-вывода (readPacket
или writePacket
) бросит a ClosedConnectionException
).
В любое время может быть вызван этот метод. Если некоторый другой поток уже вызвал это, однако, то другой вызов блокирует, пока первый вызов не полон, после которого это возвратится без эффекта.
IOException
- Если ошибка ввода-вывода происходитpublic abstract boolean isOpen()
Авторское право © 1999, 2013, Oracle и/или его филиалы. Все права защищены.
Проект сборка-b92