定义一个复杂的二进制文件以从C#对其进行读写的可能的解决方案是什么。 目前,我通过固定/硬编码偏移量访问二进制字段,但是我想拥有一个更干净的解决方案。 我调查了Kaitai,它看起来很完美,但是我不能用它来写数据。
是否有类似的解决方案/框架/库来定义和使用二进制文件?
由于我已经有一个正在使用的现有格式,因此我无法完全交换为ProtoBuf或类似格式。
编辑:一个问题是文件大小为100MB到数GB,因此我需要流功能并且无法一次解析所有文件。
Edit2:换句话说,我需要一个更干净的解决方案来解决这种问题(其中FileHeader
之类的结构也借助于MarshalAs
和FieldOffsets
来定义:
[FieldOffset(0)]
[MarshalAs(UnmanagedType.Struct, SizeConst = HeaderSegmentSize)]
public FileHeader HeaderSegment; //256byte
[FieldOffset(256)]
[MarshalAs(UnmanagedType.ByValArray, SizeConst = RunningDataSegmentSize)]
public byte[] RunningDataSegment; // 9MB
[FieldOffset((1024 * 1024 * 9) + 256)]
[MarshalAs(UnmanagedType.ByValArray, SizeConst = MeasurementLabelSegmentSize)]
public MeasurementLabel[] MeasurementLabelSegment; //1MB
[FieldOffset((1024 * 1024 * 1) + (1024 * 1024 * 9) + 256)]
[MarshalAs(UnmanagedType.ByValArray, SizeConst = DescriptionSegmentSize)]
public byte[] DescriptionSegment; //1MB
[FieldOffset((1024 * 1024 * 1) + (1024 * 1024 * 1) + (1024 * 1024 * 9) + 256)]
public FileData[] DataSegment; //openEnd