JdwpPacket
public
final
class
JdwpPacket
extends Object
| java.lang.Object | |
| ↳ | com.android.tradefed.device.server.jdwp.chunkhandler.JdwpPacket |
位于某个 ByteBuffer 开头的 JDWP 数据包。
这样一来,我们便可使用数据包的解码结果来封装指向数据的“指针”。
此处的任何操作都不会同步。如果多个线程将访问同一 ByteBuffer,则需要进行外部同步。
使用构造函数创建空数据包,或使用“findPacket()”将 JdwpPacket 封装在现有数据周围。
摘要
常量 | |
|---|---|
int |
JDWP_HEADER_LEN
|
公共构造函数 | |
|---|---|
JdwpPacket(ByteBuffer buf)
在“buf”中创建一个新的空数据包。 |
|
公共方法 | |
|---|---|
void
|
consume()
使用 JDWP 数据包。 |
void
|
copy(ByteBuffer into)
用于将数据包复制到新缓冲区中的辅助函数。 |
static
JdwpPacket
|
findPacket(ByteBuffer buf)
|
static
JdwpPacket
|
findPacketHeader(ByteBuffer buf)
|
void
|
finishPacket(int cmdSet, int cmd, int payloadLength)
完成使用 newPacket() 创建的数据包。 |
int
|
getId()
返回数据包的 ID。 |
int
|
getLength()
返回数据包的长度。 |
static
int
|
getPacketLength(ByteBuffer buf)
如果“buf”包含 JdwpPacket,则前 4 个字节是数据包的长度。 |
ByteBuffer
|
getPayload()
返回字节缓冲区的切片,该切片位于 JDWP 标头之后,一直到块标头的开头。 |
boolean
|
is(int cmdSet, int cmd)
|
boolean
|
isEmpty()
如果此 JDWP 数据包不包含任何数据,则返回“true”。 |
boolean
|
isError()
如果此 JDWP 数据包是具有非零错误代码的回复,则返回“true”。 |
boolean
|
isReply()
如果此 JDWP 数据包被标记为回复,则返回“true”。 |
void
|
log(String action)
|
void
|
move(ByteBuffer buf)
将数据包数据从我们所处的缓冲区“移出”并移入当前位置的 buf 中。 |
void
|
setPayload(ByteBuffer buf)
将软件包的载荷替换为缓冲区。 |
String
|
toString()
|
void
|
write(SocketChannel chan)
将数据包写入“chan”。 |
常量
JDWP_HEADER_LEN
public static final int JDWP_HEADER_LEN
常量值: 11 (0x0000000b)
公共构造函数
JdwpPacket
public JdwpPacket (ByteBuffer buf)
在“buf”中创建一个新的空数据包。
| 参数 | |
|---|---|
buf |
ByteBuffer |
公共方法
consume
public void consume ()
使用 JDWP 数据包。
在进入和退出时,“位置”位于缓冲区中数据的末尾。
复制
public void copy (ByteBuffer into)
用于将数据包复制到新缓冲区的辅助函数。
| 参数 | |
|---|---|
into |
ByteBuffer |
findPacketHeader
public static JdwpPacket findPacketHeader (ByteBuffer buf)
| 参数 | |
|---|---|
buf |
ByteBuffer |
| 返回 | |
|---|---|
JdwpPacket |
|
finishPacket
public void finishPacket (int cmdSet,
int cmd,
int payloadLength)完成使用 newPacket() 创建的数据包。
这始终会创建一个命令数据包,其中包含按顺序排列的下一个序列号。
我们必须将“payloadLength”作为实参,因为我们无法看到 getPayload() 返回的“slice”中的位置。我们可以从块头中提取它,但一个 JDWP 数据包中可以包含多个块。
退出时,“位置”指向数据的末尾。
| 参数 | |
|---|---|
cmdSet |
int |
cmd |
int |
payloadLength |
int |
getId
public int getId ()
返回数据包的 ID。对于回复数据包,这使我们能够将回复与原始请求相匹配。
| 返回 | |
|---|---|
int |
|
getLength
public int getLength ()
返回数据包的长度。这包括标头,因此空数据包的长度为 11 字节。
| 返回 | |
|---|---|
int |
|
getPacketLength
public static int getPacketLength (ByteBuffer buf)
当“buf”包含 JdwpPacket 时,前 4 个字节是数据包的长度。此辅助函数会读取前 4 个字节,并验证长度是否至少为 JDWP 标头的大小。
| 参数 | |
|---|---|
buf |
ByteBuffer:假设包含 JDWP 数据包的缓冲区。 |
| 返回 | |
|---|---|
int |
如果长度无效,则为 -1;否则为数据包的长度。 |
getPayload
public ByteBuffer getPayload ()
返回字节缓冲区的切片,该切片位于 JDWP 标头之后,一直到块标头的开头。如果载荷大小已知,则将缓冲区的限制设置为载荷的大小;如果这是正在构建的数据包,则将限制设置为缓冲区的末尾。
完全不检查数据包 - 在空缓冲区上运行。
| 返回 | |
|---|---|
ByteBuffer |
|
is
public boolean is (int cmdSet,
int cmd)| 参数 | |
|---|---|
cmdSet |
int |
cmd |
int |
| 返回 | |
|---|---|
boolean |
|
isEmpty
public boolean isEmpty ()
如果此 JDWP 数据包没有数据,则返回“true”。
| 返回 | |
|---|---|
boolean |
|
isError
public boolean isError ()
如果此 JDWP 数据包是具有非零错误代码的回复,则返回“true”。
| 返回 | |
|---|---|
boolean |
|
isReply
public boolean isReply ()
如果此 JDWP 数据包标记为回复,则返回“true”。
| 返回 | |
|---|---|
boolean |
|
log
public void log (String action)
| 参数 | |
|---|---|
action |
String |
转移
public void move (ByteBuffer buf)
将数据包数据从我们所处的缓冲区移出,并移入当前位置的 buf。
| 参数 | |
|---|---|
buf |
ByteBuffer |
setPayload
public void setPayload (ByteBuffer buf)
将软件包的载荷替换为缓冲区。当前位置保持不变。
| 参数 | |
|---|---|
buf |
ByteBuffer |
toString
public String toString ()
| 返回 | |
|---|---|
String |
|
写内容
public void write (SocketChannel chan)
将数据包写入“chan”。
JDWP 数据包从偏移量 0 开始,到 mBuffer.position() 结束。
| 参数 | |
|---|---|
chan |
SocketChannel |