【发布时间】:2013-08-02 03:50:11
【问题描述】:
所以我正在解析已知数量的字节。但是,前两个字节代表某个数字,然后下一个代表一个只有一个字节的数字,但接下来的四个字节可能都代表一个很大的数字。除了我的方式之外,有没有更好的方法来解析数据。
switch (i) {
//Status
case 2:
temp[3] = bytes[i];
break;
case 3:
temp[2] = bytes[i];
ret.put("Status", byteArrayToInt(temp).toString());
break;
//Voltage
case 4:
temp[3] = bytes[i];
break;
case 5:
temp[2] = bytes[i];
ret.put("Voltage", byteArrayToInt(temp).toString());
break;
//Lowest Device Signal
case 6:
temp[3] = bytes[i];
break;
case 7:
temp[2] = bytes[i];
ret.put("Lowest Device Signal", byteArrayToInt(temp).toString());
clearBytes(temp);
break;
}
我正在遍历字节数组,并且我有一个开关,它知道哪些字节到哪个位置,例如我知道第二个和第三个字节到状态码。所以我把它们组合成一个int。临时字节数组是一个 byte[] temp = new byte[4]。 有更好的方法吗?
【问题讨论】:
-
您可以按照自己的方式使用临时代码,也可以尝试使用某种通用解析器。如果它没有比上述复杂得多,并且您不会对其进行太多更改,那么上述临时方法可能比找出更通用的方案更容易。
-
i的值是从 byte[] 本身读取的吗?你能提供一些关于数据结构的额外信息吗? -
创建字符串并将其放入 Map 比解析要昂贵得多。可能高达 10 倍。我会担心避免先创建对象或设置地图。
标签: java performance parsing byte