将字节数组解析为不同的数据类型?

时间:2011-08-01 14:14:03

标签: java

我正在使用Naga库从套接字读取数据,该套接字生成通过委托函数接收的byte[]数组。

我的问题是,如何知道对齐,我怎样才能将这个字节数组转换为特定的数据类型?

例如,如果字节数组包含以下数据,则按顺序:

| byte | byte | short | byte | int | int |

如何提取这些数据类型( little endian )?

2 个答案:

答案 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)

这可以使用ByteBufferScatteringByteChannel完成,如下所示:

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);