问候,
执行二进制自定义格式的序列化/反序列化的最惯用方法是什么?例如,如何读取一个文件,其中包含以字节为单位指定的标头集(例如4,4,16,4,8,8,4,16),没有填充,具有混合整数/ byte[]
类型?
换句话说,在指定结构时如何实现与C中相同的控制级别,而不必在Stream上求助于Read / WriteBytes序列?
感谢。
答案 0 :(得分:1)
这是一个article,它说明了实现这一目标的一种方法。但是如果你想要ideomatic .NET那么BinaryReader
就是你要走的路。如果格式没有施加并且你可以控制它,你也可以使用BinaryFormatter,但它产生的是不可互操作的。
答案 1 :(得分:0)
假设这是一种自定义格式,我会(并且有)查看XmlReader API;我会编写一个使用流的SomeFormatReader,并且有一个读取下一个头的方法。一旦调用者看到此返回true(false意味着EOF),调用者应该能够访问属性以检查后面的数据格式,并且能够调用ReadInt32,ReadString,ReadSingle等任何一个来处理每个(跟随二进制格式的规则)。在我的例子中,我的读者类也处理额外的数据缓冲等。
然后,您可以选择使用使用类型元数据的辅助层和新编写的阅读器来填充对象模型(反射,代码生成,元编程等)。但是,创建一个好的独立读者是他的第一个障碍。