Best way to read structured binary files with Java

前端 未结 12 919
我寻月下人不归
我寻月下人不归 2020-12-04 13:23

I have to read a binary file in a legacy format with Java.

In a nutshell the file has a header consisting of several integers, bytes and fixed-length char arrays, f

12条回答
  •  一整个雨季
    2020-12-04 13:34

    I used Javolution and javastruct, both handles the conversion between bytes and objects.

    Javolution provides classes that represent C types. All you need to do is to write a class that describes the C structure. For example, from the C header file,

    struct Date {
        unsigned short year;
        unsigned byte month;
        unsigned byte day;
    };
    

    should be translated into:

    public static class Date extends Struct {
        public final Unsigned16 year = new Unsigned16();
        public final Unsigned8 month = new Unsigned8();
        public final Unsigned8 day   = new Unsigned8();
    }
    

    Then call setByteBuffer to initialize the object:

    Date date = new Date();
    date.setByteBuffer(ByteBuffer.wrap(bytes), 0);
    

    javastruct uses annotation to define fields in a C structure.

    @StructClass
    public class Foo{
    
        @StructField(order = 0)
        public byte b;
    
        @StructField(order = 1)
        public int i;
    }
    

    To initialize an object:

    Foo f2 = new Foo();
    JavaStruct.unpack(f2, b);
    

提交回复
热议问题