При работе через Bluetooth получаю ответ от оборудования по сокету в формате массива byte[] buffer
.
Этот ответ физически представляет собой запись данных разной длины (byte, short, int).
Для дальнейшей работы с данными есть класс:
public static class opstate {
// 1-4 RG
byte actuator;
byte logical;
byte physical;
byte optionsPart1_ActChannell;
byte fault1623;
byte notReady;
byte fault0007;
byte fault0815;
// 5 RG
byte torqPercent; // процент момента (знаковое число 1 байт)
byte openPercent; // процент открытия арматуры (беззнаковое число 1 байт)
// 6-7
int absPositionCode; // Код положения привода (беззнаковое число 8 байтов).
//8-9
int relPositionCode; // Относительный код положения привода.
//10
short absTorqCode; // Код момента.Беззнаковое число размером 2 байта.
//11
short relTorqCode;
}
Есть ли способ корректно преобразовать экземпляр такого класса в формат массива byte[]
для передачи его в устройство и наоборот, декодировать нужные данные из массива byte[]
при условии что в массиве они лежат в том же порядке что и записаны в классе?
Это же элементарно Ватсон:
Объект в массив byte
:
public byte[] obj2Byte(Object myObject) throws IOException {
ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
ObjectOutputStream objStream = new ObjectOutputStream(byteStream);
objStream.writeObject(myObject);
return byteStream.toByteArray();
}
Массив byte
в объект:
public Object byte2Obj(byte[] bytes) throws IOException {
ByteArrayInputStream byteStream = new ByteArrayInputStream(bytes);
ObjectInputStream objStream = new ObjectInputStream(byteStream);
return objStream.readObject();
}
Есть ли способ корректно преобразовать экземпляр такого класса в формат массива byte[] для передачи его в устройство и наоборот, декодировать нужные данные из массива byte[] при условии что в массиве они лежат в том же порядке что и записаны в классе?
Да есть способ.
Если ваш формат кастомный. Написать самому encode\decode
Если ваш формат общепринятый - могут быть компиляторы классов, которые по схеме данных автоматически напишут всю логику перевода byte[] в класс и обратно.
Сериализация и правда работает, но она очень много создает служебной информации в массиве так что нашел метод который работает с чистыми значениями в массиве - ByteBuffer
и его методы getShort()
и getInt()
.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Требуется проверять файл xml на наличие определенных значений свойстваДумал сделать через antrun plugin и shell скрипт
У меня есть два класса, один класс MainActivity, а другой собственный классМой активити класс содержит textView
Есть такая процедура, она работает из консоли, когда я ввожу call products_count(null) - она работает