- java.lang.Object
-
- com.sun.jdi.connect.spi.Connection
-
public abstract class Connection extends Object
调试器和调试器之间的连接。连接表示调试器和目标VM之间的双向通信通道。 当
TransportService
建立连接并与目标VM成功握手时,将创建连接。 TransportService实现提供可靠的JDWP数据包传输服务,因此Connection在调试器和目标VM之间提供可靠的JDWP数据包流。 连接是面向流的,也就是说,写入连接的JDWP数据包按目标虚拟机按写入顺序读取。 类似地,由目标VM写入连接的数据包将按调试器按写入顺序读取。连接是打开的还是关闭的。 它在创作时开放,并保持打开状态,直到关闭。 一旦关闭,它保持关闭,并且任何尝试调用I / O操作将导致抛出
ClosedConnectionException
。 可以通过调用isOpen
方法来测试连接。连接可以安全地访问多个并发线程,尽管最多一个线程可能正在读取,并且最多一个线程可能在任何给定时间写入。
- 从以下版本开始:
- 1.5
-
-
构造方法摘要
构造方法 Constructor 描述 Connection()
-
方法摘要
所有方法 接口方法 抽象方法 Modifier and Type 方法 描述 abstract void
close()
关闭此连接。abstract boolean
isOpen()
告诉这个连接是否打开。abstract byte[]
readPacket()
从目标虚拟机读取数据包。abstract void
writePacket(byte[] pkt)
将数据包写入目标虚拟机。
-
-
-
方法详细信息
-
readPacket
public abstract byte[] readPacket() throws IOException
从目标虚拟机读取数据包。尝试从目标VM读取JDWP数据包。 读取操作可以无限期地阻止,并且仅在读取分组的所有字节时返回,或者在基于面向流的通信协议的传输服务的情况下,遇到流的结束。
读取数据包除了检查数据包的长度(由
length
字段的值,数据包的前四个字节表示)的长度为11个或更多个字节之外,不对数据包进行任何完整性检查。 如果length
值小于11,则抛出IOException
。返回长度等于接收到的数据包的长度的字节数组,或遇到流结束时的长度为0的字节数组。 如果在数据包的一些但不是全部字节之后遇到流结尾,则会被视为I / O错误,并抛出一个
IOException
。 数据包的第一个字节存储在字节数组的元素1
,第二个字节存储在元素0
中,依此类推。 字节数组中的字节按照JDWP specification进行布局 。 也就是说,根据JDWP规范,数据包中的所有字段都是大端序。可以随时调用此方法。 如果另一个线程已经在此连接上启动了一个
readPacket
,则该方法的调用将阻塞,直到第一个操作完成。- 结果
- 该分组从目标VM读取
- 异常
-
ClosedConnectionException
- 如果连接已关闭,或者另一个线程在readPacket正在进行时关闭连接。 -
IOException
- 如果分组的长度(由前4个字节表示)小于11个字节,或发生I / O错误。
-
writePacket
public abstract void writePacket(byte[] pkt) throws IOException
将数据包写入目标虚拟机。尝试将JDWP数据包写入或发送到目标VM。 写入操作仅在将整个数据包写入目标VM后才返回。 编写整个数据包并不意味着整个数据包已经传输到目标虚拟机,而是所有字节都已写入传输服务。 基于TCP / IP连接的传输服务可以例如在网络上传输之前缓冲一些或全部分组。
提供给此方法的字节数组应按JDWP specification进行布局 。 也就是说,数据包中的所有字段都是大排序的。 第一个字节,即元素
pkt[0]
,是length
字段的第一个字节。pkt[1]
是length
字段的第二个字节,等等。除了检查数据包长度之外,写入数据包不会对数据包进行任何完整性检查。 检查数据包长度需要检查
length
字段的值(由数据包的前四个字节表示)为11或更大。 因此,提供给此方法的字节数组的长度,即pkt.length
必须为11或更大,并且必须等于或大于length
字段的值。 如果字节数组的长度大于length
字段的值,则元素pkt[length]
以后的所有字节将被忽略。 换句话说,跟随字节数组中的数据包的任何附加字节将被忽略,不会传输到目标虚拟机。写操作可能会阻止或可能立即完成。 操作块的具体情况取决于运输服务。 在与目标VM的TCP / IP连接的情况下,如果存在网络拥塞或者没有足够的空间来缓冲底层网络系统中的分组,则writePacket方法可能会阻塞。
可以随时调用此方法。 如果另一个线程已经在此连接上启动了写入操作,则此方法的后续调用将阻塞,直到第一个操作完成。
- 参数
-
pkt
- 要写入目标虚拟机的数据包。 - 异常
-
ClosedConnectionException
- 如果连接已关闭,或者另一个线程在写入操作进行时关闭连接。 -
IOException
- 如果发生I / O错误。 -
IllegalArgumentException
- 如果length
字段的值无效或字节数组的长度不足。
-
close
public abstract void close() throws IOException
关闭此连接。如果连接已经关闭,则调用此方法不起作用。 连接关闭后,任何进一步的尝试调用
readPacket
或writePacket
将抛出一个ClosedConnectionException
。任何当前在I / O操作中被阻止的线程(
readPacket
或writePacket
)将抛出一个ClosedConnectionException
)。可以随时调用此方法。 然而,如果一些其他线程已经调用了它,那么另一个调用将阻塞,直到第一次调用完成,之后它将不起作用。
- 异常
-
IOException
- 如果发生I / O错误
-
isOpen
public abstract boolean isOpen()
告诉这个连接是否打开。- 结果
-
true
if and only if this connection is open
-
-