c# - .Net 中复杂和大型二进制文件的声明性语言
问题描述
定义一个复杂的二进制文件以从 C# 读取和写入它的可能解决方案是什么。目前我通过固定/硬编码的偏移量访问二进制字段,但我希望有一个更清洁的解决方案。我看了开泰,它看起来很完美,只是我不能用它来写数据。
是否有类似的解决方案/框架/库来定义和使用二进制文件?
由于我已经有一个正在使用的现有格式,我无法将 ie 完全交换为 ProtoBuf 或类似格式。
编辑:一个问题是,文件从 100MB 到几 GB 大,所以我需要流功能并且不能一次全部解析。
Edit2:换句话说,我需要一个更清洁的解决方案来解决这样的问题(其中的结构FileHeader
也可以在MarshalAs
and的帮助下定义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
解决方案
推荐阅读
- javascript - Jquery XML解析跳过数据元素/节点
- apache - Tomcat8没有部署war文件
- hybris - 使用导入脚本导入时媒体未正确导入
- r - 尝试使用 FAOSTAT 导入数据时出现 data.frame 错误
- django - Django:第 41 行的块标记无效:'endblock',预期为 'empty' 或 'endfor'
- machine-learning - 您如何准确计算卷积神经网络中过滤器的梯度?
- sql - Oracle 数据库中 DST 更改的时间似乎是凌晨 1 点而不是凌晨 2 点
- excel - 循环验证后如何发送带有字符串列表的电子邮件
- amazon-web-services - 静态路由配置问题
- python - 在 Python 中,如何指定参数是所有元素都具有相同类型的列表?