JdwpPacket
public final class JdwpPacket
extends Object
| java.lang.Object | |
| ↳ | com.android.tradefed.device.server.jdwp.chunkhandler.JdwpPacket |
Пакет 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 ()Верните идентификатор пакета. |
int | getLength ()Возвращает длину пакета. |
static int | getPacketLength (ByteBuffer buf)Если «buf» содержит JdwpPackets, первые 4 байта представляют собой длину пакета. |
ByteBuffer | getPayload ()Возвращает фрагмент буфера байтов, расположенный после заголовка JDWP до начала заголовка фрагмента. |
boolean | is (int cmdSet, int cmd) |
boolean | isEmpty ()Возвращает «истина», если в этом пакете JDWP нет данных. |
boolean | isError ()Возвращает «истина», если этот пакет JDWP является ответом с ненулевым кодом ошибки. |
boolean | isReply ()Возвращает «истина», если этот пакет 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" в качестве аргумента, поскольку мы не видим позицию в "срезе", возвращаемом getPayload(). Мы могли бы извлечь её из заголовка фрагмента, но в пакете JDWP может быть несколько фрагментов.
На выходе «позиция» указывает на конец данных.
| Параметры | |
|---|---|
cmdSet | int |
cmd | int |
payloadLength | int |
получитьId
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, если длина недействительна, в противном случае — длина пакета. |
получитьполезную нагрузку
public ByteBuffer getPayload ()
Возвращает фрагмент байтового буфера, расположенный после заголовка JDWP до начала заголовка фрагмента. Предел буфера будет установлен равным размеру полезной нагрузки, если он известен; если пакет находится в стадии формирования, предел будет установлен равным концу буфера.
Не проверяет пакет вообще — работает с пустыми буферами.
| Возврат | |
|---|---|
ByteBuffer | |
является
public boolean is (int cmdSet,
int cmd)| Параметры | |
|---|---|
cmdSet | int |
cmd | int |
| Возврат | |
|---|---|
boolean | |
isEmpty
public boolean isEmpty ()
Возвращает «истина», если в этом пакете JDWP нет данных.
| Возврат | |
|---|---|
boolean | |
isError
public boolean isError ()
Возвращает «истина», если этот пакет JDWP является ответом с ненулевым кодом ошибки.
| Возврат | |
|---|---|
boolean | |
isReply
public boolean isReply ()
Возвращает «истина», если этот пакет JDWP помечен как ответ.
| Возврат | |
|---|---|
boolean | |
бревно
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 |