我正在使用Naga
库从套接字读取数据,该套接字生成通过委托函数接收的byte[]
数组。
我的问题是,如何知道对齐,我怎样才能将这个字节数组转换为特定的数据类型?
例如,如果字节数组包含以下数据,则按顺序:
| byte | byte | short | byte | int | int |
如何提取这些数据类型( little endian )?
答案 0 :(得分:8)
我建议您查看ByteBuffer
类(特别是ByteBuffer.wrap
方法和各种getXxx
方法)。
示例课程:
class Packet {
byte field1;
byte field2;
short field3;
byte field4;
int field5;
int field6;
public Packet(byte[] data) {
ByteBuffer buf = ByteBuffer.wrap(data)
.order(ByteOrder.LITTLE_ENDIAN);
field1 = buf.get();
field2 = buf.get();
field3 = buf.getShort();
field4 = buf.get();
field5 = buf.getInt();
field6 = buf.getInt();
}
}
答案 1 :(得分:1)
这可以使用ByteBuffer和ScatteringByteChannel完成,如下所示:
ByteBuffer one = ByteBuffer.allocate(1); ByteBuffer two = ByteBuffer.allocate(1); ByteBuffer three = ByteBuffer.allocate(2); ByteBuffer four = ByteBuffer.allocate(1); ByteBuffer five = ByteBuffer.allocate(4); ByteBuffer six = ByteBuffer.allocate(4); ByteBuffer[] bufferArray = { one, two, three, four, five, six }; channel.read(bufferArray);