.Net中复杂和大二进制文件的声明性语言

时间:2019-03-14 08:12:46

标签: c# .net binary dsl kaitai-struct

定义一个复杂的二进制文件以从C#对其进行读写的可能的解决方案是什么。 目前,我通过固定/硬编码偏移量访问二进制字段,但是我想拥有一个更干净的解决方案。 我调查了Kaitai,它看起来很完美,但是我不能用它来写数据。

是否有类似的解决方案/框架/库来定义和使用二进制文件?

由于我已经有一个正在使用的现有格式,因此我无法完全交换为ProtoBuf或类似格式。

编辑:一个问题是文件大小为100MB到数GB,因此我需要流功能并且无法一次解析所有文件。

Edit2:换句话说,我需要一个更干净的解决方案来解决这种问题(其中FileHeader之类的结构也借助于MarshalAsFieldOffsets来定义:

[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

0 个答案:

没有答案