模块  jdk.jdi

Class Connection


  • public abstract class Connectionextends Object
    调试器与其调试的目标VM之间的连接。

    Connection表示调试器和目标VM之间的双向通信通道。 TransportService建立连接并成功与目标VM握手时,将创建连接。 TransportService实现提供可靠的JDWP数据包传输服务,因此Connection在调试器和目标VM之间提供可靠的JDWP数据包流。 Connection是面向流的,也就是说,写入连接的JDWP数据包是由目标VM按写入顺序读取的。 类似地,调试器按照编写它们的顺序读取目标VM写入连接的数据包。

    连接是打开还是关闭。 它在创建时是开放的,并且在关闭之前保持打开状态。 一旦关闭,它将保持关闭状态,并且任何在其上调用I / O操作的尝试都将导致抛出ClosedConnectionException 可以通过调用isOpen方法来测试连接。

    连接对于多个并发线程的访问是安全的,尽管最多一个线程可能正在读取,并且最多一个线程可能在任何给定时间写入。

    从以下版本开始:
    1.5
    • 构造方法详细信息

      • Connection

        public Connection()
    • 方法详细信息

      • readPacket

        public abstract byte[] readPacket()                           throws IOException
        从目标VM读取数据包。

        尝试从目标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
        将数据包写入目标VM。

        尝试将JDWP数据包写入或发送到目标VM。 写操作仅在将整个数据包写入目标VM后返回。 写入整个数据包并不意味着整个数据包已经传输到目标VM,而是所有字节都已写入传输服务。 例如,基于TCP / IP连接的传输服务可以在网络上传输之前缓冲一些或全部分组。

        提供给此方法的字节数组应按照JDWP specification进行布局 也就是说,数据包中的所有字段都是大端序。 第一个字节,即元素pkt[0] ,是length字段的第一个字节。 pkt[1]length字段的第二个字节,依此类推。

        除了检查数据包长度之外,写入数据包不会对数据包进行任何完整性检查。 检查数据包长度需要检查length字段的值(由数据包的前四个字节指示)是否为11或更大。 因此,提供给此方法的字节数组的长度(即pkt.length )必须为11或更大,并且必须等于或大于length字段的值。 如果字节数组的长度大于length字段的值,则忽略元素pkt[length]以后的所有字节。 换句话说,字节数组中数据包后面的任何附加字节都将被忽略,并且不会传输到目标VM。

        写操作可以阻止或立即完成。 操作块的确切情况取决于传输服务。 在与目标VM的TCP / IP连接的情况下,如果存在网络拥塞或者没有足够的空间来缓冲底层网络系统中的分组,则writePacket方法可以阻止。

        可以随时调用此方法。 如果另一个线程已经在此Connection上启动了写操作,则此方法的后续调用将阻塞,直到第一个操作完成。

        参数
        pkt - 要写入目标VM的数据包。
        异常
        ClosedConnectionException - 如果连接已关闭,或者其他线程在写入操作正在进行时关闭连接。
        IOException - 如果发生I / O错误。
        IllegalArgumentException - 如果 length字段的值无效,或者字节数组的长度不足。
      • close

        public abstract void close()                    throws IOException
        关闭此连接。

        如果连接已关闭,则调用此方法无效。 连接关闭后,任何进一步的尝试调用readPacketwritePacket将抛出ClosedConnectionException

        当前在I / O操作中阻塞的任何线程( readPacketwritePacket )将抛出ClosedConnectionException )。

        可以随时调用此方法。 但是,如果某个其他线程已经调用了它,那么另一个调用将阻塞,直到第一次调用完成,之后它将返回而不起作用。

        异常
        IOException - 如果发生I / O错误
      • isOpen

        public abstract boolean isOpen()
        判断此连接是否已打开。
        结果
        true if and only if this connection is open