JdwpPacket

public final class JdwpPacket
extends Object

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


Một gói JDWP, nằm ở đầu ByteBuffer ở đâu đó.

Điều này cho phép chúng ta bao bọc một "con trỏ" đến dữ liệu bằng kết quả giải mã gói.

Không có thao tác nào ở đây được đồng bộ hoá. Nếu nhiều luồng sẽ truy cập vào cùng một ByteBuffer, thì bạn sẽ cần đồng bộ hoá bên ngoài.

Sử dụng hàm khởi tạo để tạo một gói trống hoặc "findPacket()" để bao bọc một JdwpPacket xung quanh dữ liệu hiện có.

Tóm tắt

Hằng số

int JDWP_HEADER_LEN

Hàm khởi tạo công khai

JdwpPacket(ByteBuffer buf)

Tạo một gói trống mới trong "buf".

Phương thức công khai

void consume()

Sử dụng gói JDWP.

void copy(ByteBuffer into)

Hàm trợ giúp để sao chép gói vào một vùng đệm mới.

static JdwpPacket findPacket(ByteBuffer buf)
static JdwpPacket findPacketHeader(ByteBuffer buf)
void finishPacket(int cmdSet, int cmd, int payloadLength)

Kết thúc một gói được tạo bằng newPacket().

int getId()

Trả về mã nhận dạng của gói.

int getLength()

Trả về độ dài của một gói.

static int getPacketLength(ByteBuffer buf)

Khi "buf" chứa JdwpPackets, 4 byte đầu tiên là độ dài của gói.

ByteBuffer getPayload()

Trả về một lát của bộ đệm byte, được đặt sau tiêu đề JDWP đến đầu tiêu đề của khối.

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

Trả về "true" nếu gói JDWP này không có dữ liệu.

boolean isError()

Trả về "true" nếu gói JDWP này là một phản hồi có mã lỗi khác 0.

boolean isReply()

Trả về "true" nếu gói JDWP này được gắn thẻ là một câu trả lời.

void log(String action)
void move(ByteBuffer buf)

"Di chuyển" dữ liệu gói ra khỏi vùng đệm mà chúng ta đang sử dụng và vào buf tại vị trí hiện tại.

void setPayload(ByteBuffer buf)

Thay thế tải trọng của gói bằng một vùng đệm.

String toString()
void write(SocketChannel chan)

Ghi gói của chúng ta vào "chan".

Hằng số

JDWP_HEADER_LEN

public static final int JDWP_HEADER_LEN

Giá trị hằng số: 11 (0x0000000b)

Hàm khởi tạo công khai

JdwpPacket

public JdwpPacket (ByteBuffer buf)

Tạo một gói trống mới trong "buf".

Tham số
buf ByteBuffer

Phương thức công khai

tiêu thụ

public void consume ()

Sử dụng gói JDWP.

Khi vào và thoát, "vị trí" nằm ở cuối dữ liệu trong vùng đệm.

sao chép

public void copy (ByteBuffer into)

Hàm trợ giúp để sao chép gói vào một vùng đệm mới.

Tham số
into ByteBuffer

findPacket

public static JdwpPacket findPacket (ByteBuffer buf)

Tham số
buf ByteBuffer

Giá trị trả về
JdwpPacket

findPacketHeader

public static JdwpPacket findPacketHeader (ByteBuffer buf)

Tham số
buf ByteBuffer

Giá trị trả về
JdwpPacket

finishPacket

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

Kết thúc một gói được tạo bằng newPacket().

Thao tác này luôn tạo một gói lệnh, với số sê-ri tiếp theo theo trình tự.

Chúng ta phải lấy "payloadLength" làm đối số vì không thể thấy vị trí trong "slice" do getPayload() trả về. Chúng ta có thể lấy thông tin này từ tiêu đề khối, nhưng việc có nhiều khối trong một gói JDWP là hợp lệ.

Khi thoát, "position" sẽ trỏ đến cuối dữ liệu.

Tham số
cmdSet int

cmd int

payloadLength int

getId

public int getId ()

Trả về mã nhận dạng của gói. Đối với một gói phản hồi, điều này cho phép chúng ta so khớp phản hồi với yêu cầu ban đầu.

Giá trị trả về
int

getLength

public int getLength ()

Trả về độ dài của một gói. Điều này bao gồm cả tiêu đề, nên một gói trống có độ dài 11 byte.

Giá trị trả về
int

getPacketLength

public static int getPacketLength (ByteBuffer buf)

Khi "buf" chứa JdwpPackets, 4 byte đầu tiên là độ dài của gói. Hàm trợ giúp này đọc 4 byte đầu tiên và xác thực rằng độ dài ít nhất phải bằng kích thước của tiêu đề JDWP.

Tham số
buf ByteBuffer: một vùng đệm được giả định là chứa một gói jdwp.

Giá trị trả về
int -1 nếu độ dài không hợp lệ, nếu không thì độ dài của gói.

getPayload

public ByteBuffer getPayload ()

Trả về một lát của vùng đệm byte, được đặt sau tiêu đề JDWP đến đầu tiêu đề khối. Giới hạn của vùng đệm sẽ được đặt thành kích thước của tải trọng nếu biết kích thước; nếu đây là một gói đang được tạo, giới hạn sẽ được đặt thành cuối vùng đệm.

Không kiểm tra gói nào cả – hoạt động trên các vùng đệm trống.

Giá trị trả về
ByteBuffer

public boolean is (int cmdSet, 
                int cmd)

Tham số
cmdSet int

cmd int

Giá trị trả về
boolean

isEmpty

public boolean isEmpty ()

Trả về "true" nếu gói JDWP này không có dữ liệu.

Giá trị trả về
boolean

isError

public boolean isError ()

Trả về "true" nếu gói JDWP này là một phản hồi có mã lỗi khác 0.

Giá trị trả về
boolean

isReply

public boolean isReply ()

Trả về "true" nếu gói JDWP này được gắn thẻ là một câu trả lời.

Giá trị trả về
boolean

log

public void log (String action)

Tham số
action String

di chuyển

public void move (ByteBuffer buf)

"Di chuyển" dữ liệu gói ra khỏi vùng đệm mà chúng ta đang sử dụng và vào buf tại vị trí hiện tại.

Tham số
buf ByteBuffer

setPayload

public void setPayload (ByteBuffer buf)

Thay thế tải trọng của gói bằng một vùng đệm. Vị trí hiện tại không thay đổi.

Tham số
buf ByteBuffer

toString

public String toString ()

Giá trị trả về
String

viết

public void write (SocketChannel chan)

Ghi gói của chúng ta vào "chan".

Gói JDWP bắt đầu ở độ lệch 0 và kết thúc ở mBuffer.position().

Tham số
chan SocketChannel