Dyl*_*mes 5 java performance parsing byte
所以我正在解析一定数量的字节.但是,前两个字节代表一些数字,然后下一个字节代表一个只有一个字节的数字,但接下来的四个字节可能代表一个很大的数字.除了我的方式之外,还有更好的解析数据的方法吗?
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;
Run Code Online (Sandbox Code Playgroud)
}
我循环遍历字节数组,我有一个开关,知道哪个字节到哪个位置,例如我知道第二个和第三个字节转到状态代码.所以我把它们组合成一个int.temp字节数组是byte [] temp = new byte [4].有更好的方法吗?
ByteBuffer可以处理这个问题.
byte[] somebytes = { 1, 5, 5, 0, 1, 0, 5 };
ByteBuffer bb = ByteBuffer.wrap(somebytes);
int first = bb.getShort(); //pull off a 16 bit short (1, 5)
int second = bb.get(); //pull off the next byte (5)
int third = bb.getInt(); //pull off the next 32 bit int (0, 1, 0, 5)
System.out.println(first + " " + second + " " + third);
Output
261 5 65541
Run Code Online (Sandbox Code Playgroud)
您还可以使用该get(byte[] dst, int offset, int length)方法拉出任意数量的字节,然后将字节数组转换为您需要的任何数据类型.
您可以使用DataInputStream将多个字节读取为int或short.看起来你一次只使用2个字节,所以你应该读短路而不是整数(在Java中总是4个字节).
但是在下面的代码示例中,我将使用您的描述"但是,前两个字节代表一些数字,然后下一个字节代表一个只有一个字节的数字,但接下来可能接下来的四个字节代表一个数字"
DataInputStream in = new DataInputStream(new ByteArrayInputStream(bytes));
//the first two bytes represent some number
ret.put("first", Short.toString(in.readShort()));
//next one represents a number that's only one byte
ret.put("second", Byte.toString(in.readByte()));
//next four all represent one number
ret.put("Lowest Device Signal", Integer.toString(in.readInt()));
Run Code Online (Sandbox Code Playgroud)