开发者

Dissect a byte array into distinct data types?

开发者 https://www.devze.com 2023-03-25 09:12 出处:网络
I 开发者_开发技巧am using the Naga library to read data from a socket, which produces byte[] arrays which are received via a delegate function.

I 开发者_开发技巧am using the Naga library to read data from a socket, which produces byte[] arrays which are received via a delegate function.

My question is, how can I convert this byte array into specific data types, knowing the alignment?

For example, if the byte array contains the following data, in order:

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

How can I extract those data types (in little endian)?


I'd suggest you have a look at the ByteBuffer class (specifically the ByteBuffer.wrap method and the various getXxx methods).

Example class:

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


This can be accomplished using ByteBuffer and ScatteringByteChannel like so :

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

精彩评论

暂无评论...
验证码 换一张
取 消