декларативный язык для сложных и больших двоичных файлов в .Net - PullRequest
0 голосов
/ 14 марта 2019

Что может быть возможным решением для определения сложного двоичного файла для чтения и записи в него из C #.В настоящее время я получаю доступ к полям двоичного файла через фиксированные / жестко заданные смещения, но мне бы хотелось иметь более чистое решение.Я посмотрел в Kaitai, и он выглядит идеально, за исключением того, что я не могу использовать его для записи данных.

Существует ли подобное решение / framework / библиотека для определения и использования двоичных файлов?

Так как яу меня уже есть существующий формат, который я использую, я не могу заменить его, т.е. полностью на ProtoBuf или аналогичный.

Редактировать: одна проблема состоит в том, что файлы имеют размер от 100 МБ до нескольких ГБ, поэтому мне нужна функция потоковой передачи и я не могу проанализироватьвсе сразу.

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
...