Java 解析变长数据字节数组:提取数据 ID 和数据值
可以使用循环遍历的方式来解析 byte 数组。首先定义一个指针变量来指示当前遍历的位置,然后在循环中根据数据 ID 的值来确定数据值的长度,并将对应的数据 ID 和数据值存储起来。
以下是一个可能的实现示例:
public void parseByteArray(byte[] byteArray) {
int pointer = 0; // 当前指针位置
while (pointer < byteArray.length) {
byte dataId = byteArray[pointer]; // 获取当前数据 ID
pointer++; // 指针移动到数据值的起始位置
int dataValueLength = 0; // 数据值的长度
switch (dataId) {
case 0x02:
case 0x03:
case 0x09:
dataValueLength = 1;
break;
case 0x0A:
case 0x0B:
dataValueLength = 2;
break;
default:
// 未知的数据 ID,可以进行错误处理
break;
}
if (pointer + dataValueLength <= byteArray.length) {
byte[] dataValue = new byte[dataValueLength];
System.arraycopy(byteArray, pointer, dataValue, 0, dataValueLength);
// 处理数据 ID 和数据值
handleData(dataId, dataValue);
} else {
// 数据值长度不足,可以进行错误处理
break;
}
pointer += dataValueLength; // 指针移动到下一个数据 ID 的位置
}
}
public void handleData(byte dataId, byte[] dataValue) {
// 处理数据 ID 和数据值的逻辑,例如打印输出
System.out.println('数据 ID: ' + dataId + ', 数据值: ' + Arrays.toString(dataValue));
}
使用示例:
byte[] byteArray = {0x02, 0x01, 0x03, 0x02, 0x09, 0x03, 0x0A, 0x00, 0x01, 0x0B, 0x00, 0x01};
parseByteArray(byteArray);
输出结果:
数据 ID: 2, 数据值: [1]
数据 ID: 3, 数据值: [2]
数据 ID: 9, 数据值: [3]
数据 ID: 10, 数据值: [0, 1]
数据 ID: 11, 数据值: [0, 1]
本文提供了一个简单的解析方法,用户可以根据实际情况修改代码以满足不同的需求。例如,可以修改 handleData 方法来进行更复杂的处理,也可以添加错误处理机制以应对不同的异常情况。
原文地址: https://www.cveoy.top/t/topic/pb59 著作权归作者所有。请勿转载和采集!