JdwpPacket

public final class JdwpPacket
extends Object

java.lang.Object
   ↳ com.android.tradefed.device.server.jdwp.chunkhandler.JdwpPacket


แพ็กเก็ต JDWP ซึ่งอยู่ที่จุดเริ่มต้นของ ByteBuffer ที่ใดที่หนึ่ง

ซึ่งช่วยให้เราสามารถรวม "พอยน์เตอร์" ไปยังข้อมูลกับผลลัพธ์ของการถอดรหัสแพ็กเก็ตได้

ไม่มีการซิงค์การดำเนินการใดๆ ที่นี่ หากหลายเธรดจะเข้าถึง 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()

แสดงรหัสของแพ็กเก็ต

int getLength()

แสดงผลความยาวของแพ็กเก็ต

static int getPacketLength(ByteBuffer buf)

เมื่อ "buf" มี JdwpPackets 4 ไบต์แรกจะเป็นความยาวของแพ็กเก็ต

ByteBuffer getPayload()

ส่งคืนส่วนของบัฟเฟอร์ไบต์ที่วางตำแหน่งหลังส่วนหัว JDWP ไปยังจุดเริ่มต้นของส่วนหัวของก้อนข้อมูล

boolean is(int cmdSet, int cmd)
boolean isEmpty()

แสดงผล "จริง" หากแพ็กเก็ต JDWP นี้ไม่มีข้อมูล

boolean isError()

แสดงผล "true" หากแพ็กเก็ต JDWP นี้เป็นการตอบกลับที่มีรหัสข้อผิดพลาดที่ไม่ใช่ 0

boolean isReply()

แสดงผล "true" หากแพ็กเก็ต JDWP นี้มีการแท็กเป็นการตอบกลับ

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

เมธอดสาธารณะ

ใช้

public void consume ()

ใช้แพ็กเก็ต JDWP

เมื่อเข้าและออก "ตำแหน่ง" จะอยู่ที่ท้ายข้อมูลในบัฟเฟอร์

ขอสำเนา

public void copy (ByteBuffer into)

ฟังก์ชันตัวช่วยในการคัดลอกแพ็กเก็ตลงในบัฟเฟอร์ใหม่

พารามิเตอร์
into ByteBuffer

findPacket

public static JdwpPacket findPacket (ByteBuffer buf)

พารามิเตอร์
buf ByteBuffer

คิกรีเทิร์น
JdwpPacket

findPacketHeader

public static JdwpPacket findPacketHeader (ByteBuffer buf)

พารามิเตอร์
buf ByteBuffer

คิกรีเทิร์น
JdwpPacket

finishPacket

public void finishPacket (int cmdSet, 
                int cmd, 
                int payloadLength)

สิ้นสุดแพ็กเก็ตที่สร้างด้วย newPacket()

ซึ่งจะสร้างแพ็กเก็ตคำสั่งที่มีหมายเลขซีเรียลถัดไปในลำดับเสมอ

เราต้องใช้ "payloadLength" เป็นอาร์กิวเมนต์เนื่องจากเราไม่เห็นตำแหน่งใน "slice" ที่ getPayload() ส่งคืน เราอาจดึงข้อมูลนี้ออกจากส่วนหัวของ Chunk ได้ แต่ก็เป็นไปได้ที่จะมี Chunk มากกว่า 1 รายการในแพ็กเก็ต JDWP

เมื่อออกจากฟังก์ชัน "position" จะชี้ไปยังจุดสิ้นสุดของข้อมูล

พารามิเตอร์
cmdSet int

cmd int

payloadLength int

getId

public int getId ()

แสดงรหัสของแพ็กเก็ต สำหรับแพ็กเก็ตการตอบกลับ การดำเนินการนี้จะช่วยให้เราจับคู่การตอบกลับกับคำขอเดิมได้

คิกรีเทิร์น
int

getLength

public int getLength ()

แสดงผลความยาวของแพ็กเก็ต ซึ่งรวมถึงส่วนหัวด้วย ดังนั้นแพ็กเก็ตว่างจึงมีความยาว 11 ไบต์

คิกรีเทิร์น
int

getPacketLength

public static int getPacketLength (ByteBuffer buf)

เมื่อ "buf" มี JdwpPackets 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 นี้ไม่มีข้อมูล

คิกรีเทิร์น
boolean

isError

public boolean isError ()

แสดงผล "true" หากแพ็กเก็ต JDWP นี้เป็นการตอบกลับที่มีรหัสข้อผิดพลาดที่ไม่ใช่ 0

คิกรีเทิร์น
boolean

isReply

public boolean isReply ()

แสดงผล "true" หากแพ็กเก็ต JDWP นี้มีการแท็กเป็นการตอบกลับ

คิกรีเทิร์น
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