ByteArray Parse Tutorial
Поддержка BOOL UINT16 INT16 UINT32 INT32 FLOAT32 FLOAT64 STRING read-write
@Data
public class ByteArrayBean {
@ByteArrayVariable(byteOffset = 0, bitOffset = 0, count = 1, type = EDataType.BOOL)
Boolean boolData;
@ByteArrayVariable(byteOffset = 0, count = 1, type = EDataType.BYTE)
Byte byteData;
@ByteArrayVariable(byteOffset = 3, count = 1, type = EDataType.UINT16)
Integer uint16Data;
@ByteArrayVariable(byteOffset = 3, count = 1, type = EDataType.INT16)
Short int16Data;
@ByteArrayVariable(byteOffset = 5, count = 1, type = EDataType.UINT32)
Long uint32Data;
@ByteArrayVariable(byteOffset = 9, count = 1, type = EDataType.INT32)
Integer int32Data;
@ByteArrayVariable(byteOffset = 13, count = 1, type = EDataType.FLOAT32)
Float float32Data;
@ByteArrayVariable(byteOffset = 21, count = 1, type = EDataType.FLOAT64)
Double float64Data;
@ByteArrayVariable(byteOffset = 37, count = 3, type = EDataType.STRING)
String stringData;
}
@Data
public class ByteArrayListBean {
@ByteArrayVariable(byteOffset = 0, bitOffset = 0, count = 8, type = EDataType.BOOL)
List<Boolean> boolData;
@ByteArrayVariable(byteOffset = 1, count = 4, type = EDataType.BYTE)
List<Byte> byteData;
@ByteArrayVariable(byteOffset = 1, count = 2, type = EDataType.UINT16)
List<Integer> uint16Data;
@ByteArrayVariable(byteOffset = 3, count = 2, type = EDataType.INT16)
List<Short> int16Data;
@ByteArrayVariable(byteOffset = 5, count = 2, type = EDataType.UINT32)
List<Long> uint32Data;
@ByteArrayVariable(byteOffset = 5, count = 2, type = EDataType.INT32)
List<Integer> int32Data;
@ByteArrayVariable(byteOffset = 13, count = 2, type = EDataType.FLOAT32)
List<Float> float32Data;
@ByteArrayVariable(byteOffset = 21, count = 2, type = EDataType.FLOAT64)
List<Double> float64Data;
@ByteArrayVariable(byteOffset = 37, count = 3, type = EDataType.STRING)
String stringData;
}
class Demo {
public static void main(String[] args) {
ByteArraySerializer serializer = ByteArraySerializer.newInstance();
byte[] expect = new byte[]{(byte) 0x01,
// 0, 25689
(byte) 0x00, (byte) 0x00, (byte) 0x64, (byte) 0x59,
// 523975585
(byte) 0x1F, (byte) 0x3B, (byte) 0x3B, (byte) 0xA1, (byte) 0x1F, (byte) 0x3B, (byte) 0x3B, (byte) 0xA1,
// 33.16f
(byte) 0x42, (byte) 0x04, (byte) 0xA3, (byte) 0xD7, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
// 156665.35455556
(byte) 0x41, (byte) 0x03, (byte) 0x1F, (byte) 0xCA, (byte) 0xD6, (byte) 0x21, (byte) 0x39, (byte) 0xB7,
(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
// 23A
(byte) 0x32, (byte) 0x33, (byte) 0x41};
ByteArrayBean bean = serializer.toObject(ByteArrayBean.class, expect);
byte[] actual = serializer.toByteArray(bean);
expect = new byte[]{(byte) 0x81,
// 0, 25689
(byte) 0x00, (byte) 0x00, (byte) 0x64, (byte) 0x59,
// 523975585
(byte) 0x1F, (byte) 0x3B, (byte) 0x3B, (byte) 0xA1, (byte) 0x1F, (byte) 0x3B, (byte) 0x3B, (byte) 0xA1,
// 33.16f, -15.62f
(byte) 0x42, (byte) 0x04, (byte) 0xA3, (byte) 0xD7, (byte) 0xC1, (byte) 0x79, (byte) 0xEB, (byte) 0x85,
// 156665.35455556
(byte) 0x41, (byte) 0x03, (byte) 0x1F, (byte) 0xCA, (byte) 0xD6, (byte) 0x21, (byte) 0x39, (byte) 0xB7,
// -56516.66664
(byte) 0xC0, (byte) 0xEB, (byte) 0x98, (byte) 0x95, (byte) 0x55, (byte) 0x1D, (byte) 0x68, (byte) 0xC7,
// 23A
(byte) 0x32, (byte) 0x33, (byte) 0x41};
ByteArrayListBean listBean = serializer.toObject(ByteArrayListBean.class, expect);
actual =
В запросе используется язык Java. 2. Arbitrary Combination Serializer mode
serializer.toByteArray(listBean);
}
}
2. Режим произвольного комбинированного сериализатора
class Demo {
public static void main(String[] args) {
byte[] src = new byte[]{(byte) 0x81,
// 0, 25689
(byte) 0x00, (byte) 0x00, (byte) 0x64, (byte) 0x59,
// 523975585
(byte) 0x1F, (byte) 0x3B, (byte) 0x3B, (byte) 0xA1, (byte) 0x1F, (byte) 0x3B, (byte) 0x3B, (byte) 0xA1,
// 33.16f, -15.62f
(byte) 0x42, (byte) 0x04, (byte) 0xA3, (byte) 0xD7, (byte) 0xC1, (byte) 0x79, (byte) 0xEB, (byte) 0x85,
// 156665.35455556
(byte) 0x41, (byte) 0x03, (byte) 0x1F, (byte) 0xCA, (byte) 0xD6, (byte) 0x21, (byte) 0x39, (byte) 0xB7,
// -56516.66664
(byte) 0xC0, (byte) 0xEB, (byte) 0x98, (byte) 0x95, (byte) 0x55, (byte) 0x1D, (byte) 0x68, (byte) 0xC7,
// 23A
(byte) 0x32, (byte) 0x33, (byte) 0x41};
List<ByteArrayParameter> list = new ArrayList<>();
list.add(new ByteArrayParameter(0, 0, 1, EDataType.BOOL));
list.add(new ByteArrayParameter(0, 0, 1, EDataType.BYTE));
list.add(new ByteArrayParameter(3, 0, 1, EDataType.UINT16));
list.add(new ByteArrayParameter(3, 0, 1, EDataType.INT16));
list.add(new ByteArrayParameter(5, 0, 1, EDataType.UINT32));
list.add(new ByteArrayParameter(9, 0, 1, EDataType.INT32));
list.add(new ByteArrayParameter(13, 0, 1, EDataType.FLOAT32));
list.add(new ByteArrayParameter(21, 0, 1, EDataType.FLOAT64));
list.add(new ByteArrayParameter(37, 0, 3, EDataType.STRING));
ByteArraySerializer serializer = ByteArraySerializer.newInstance();
List<ByteArrayParameter> bean = serializer.extractParameter(list, src);
}
}
Перевод:
2. Произвольный комбинированный режим сериализации
Код на языке Java:
Demo {
public static void main(String[] args) {
// Создаём массив байтов
byte[] src = new byte[]{0x81, // 0, 25689
0x00, 0x00, 0x64, 0x59, // 523975585
0x1f, 0x3b, 0x3b, 0xa1, 0x1f, 0x3b, 0x3b, 0xa1, // 33.16f, -15.62f
0x42, 0x04, 0xa3, 0xd7, 0xc1, 0x79, 0xeb, 0x85, // 156665.35455556
0x41, 0x03, 0x1f, 0xca, 0xd6, 0x21, 0x39, 0xb7, // -56516.66664
0xc0, 0xeb, 0x98, 0x95, 0x55, 0x1d, 0x68, 0xc7, // 23a
0x32, 0x33, 0x41
};
// Создаём список объектов ByteArrayParameter
List<ByteArrayParameter> list = new ArrayList<ByteArrayParameter>();
list.add(new ByteArrayParameter(0, 0, 1, EDataType.BOOL)); // Добавляем объект в список
list.add(new ByteArrayParameter(0, 0, 1, EDataType.BYTE)); // Добавляем ещё один объект в список
...
// И так далее
// Создаём экземпляр класса ByteArraySerializer
ByteArraySerializer serializer = ByteArraySerializer.newInstance();
// Вызываем метод extractParameter для извлечения параметров из списка и массива байтов
List<ByteArrayParameter> bean = serializer.extractParameter(list, src);
}
}
В этом коде создаётся массив байтов src
, который содержит данные различных типов. Затем создаётся список list
объектов ByteArrayParameter
, каждый из которых представляет собой параметр с определённым типом данных.
Далее создаётся экземпляр класса ByteArraySerializer
, после чего вызывается метод extractParameter
для извлечения параметров из списка list
и массива src
.
Полученный результат сохраняется в списке bean
.
3. Byte Parse Tool
Вы можете использовать инструмент ByteReadBuff, когда необходимо преобразовать большой объём данных в виде массива байтов в желаемые данные. Инструмент использует по умолчанию режим big-endian и DCBA для анализа 4-байтовых данных, которые можно изменить в соответствии с требованиями.
class Demo {
public static void main(String[] args) {
ByteReadBuff buff = new ByteReadBuff(new byte[]{(byte) 0x55});
// Извлекаем логические данные, внутренний индекс автоматически перемещается назад
boolean b1 = buff.getBoolean(0);
// Получаем данные по указанному адресу байтового индекса
boolean b2 = buff.getBoolean(0, 1);
}
}
class Demo {
public static void main(String[] args) {
ByteReadBuff buff = new ByteReadBuff(new byte[]{(byte) 0x55, (byte) 0x33, (byte) 0x22});
// Извлекаем байт
buff.getByte();
// Извлекаем два байта
byte[] actual = buff.getBytes(2);
assertArrayEquals(new byte[]{(byte) 0x33, (byte) 0x22}, actual);
buff = new ByteReadBuff(new byte[]{(byte) 0x55, (byte) 0x33, (byte) 0x22});
// Извлекаем байт
buff.getByte();
// Извлекаем все оставшиеся байты
actual = buff.getBytes();
assertArrayEquals(new byte[]{(byte) 0x33, (byte) 0x22}, actual);
}
}
class Demo {
public static void main(String[] args) {
ByteReadBuff buff = new ByteReadBuff(new byte[]{(byte) 0x5F, (byte) 0xF5});
int actual = buff.getUInt16();
assertEquals(24565, actual);
}
}
class Demo {
public static void main(String[] args) {
ByteReadBuff buff = new ByteReadBuff(new byte[]{(byte) 0x5F, (byte) 0xF5});
short actual = buff.getInt16();
assertEquals(24565, actual);
}
}
class Demo {
public static void main(String[] args) {
ByteReadBuff buff = new ByteReadBuff(new byte[]{(byte) 0x00, (byte) 0x20, (byte) 0x37, (byte) 0x36});
long actual = buff.getUInt32();
assertEquals(2111286L, actual);
}
}
class Demo {
public static void
Этот текст относится к области разработки программного обеспечения и связан с анализом и обработкой данных. В тексте используются термины и понятия, связанные с программированием на Java, такие как массивы, списки, классы, методы и т. д. Также упоминаются инструменты и библиотеки для работы с данными, например ByteArraySerializer и ByteReadBuff.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )