2011-02-05 103 views
2

Greetings,自定义二进制文件的C#反序列化?

执行二进制自定义格式的序列化/反序列化最常用的方法是什么?例如,如何读取带有不带填充的字节(例如4,4,16,4,8,8,4,16)指定的一组头文件的文件,使用混合整数/ byte[]类型?

换句话说,在指定结构时,如何在C中实现与C相同的控制级别,而不必诉诸于Stream上的Read/WriteBytes序列?

谢谢。

+0

为什么你需要?内置[二进制序列化功能](http://msdn.microsoft.com/en-us/library/72hyey7b.aspx)有什么问题? – 2011-02-05 17:11:20

+2

@Cody,如果你不控制格式 – 2011-02-05 17:13:14

+0

@Marc:没错,那是真的。从这个问题来看,我不清楚这是否是这种情况。如果它是一个选项,它是迄今为止最优雅的一个。许多新的.NET Framework程序员都不知道这种内置的功能。 – 2011-02-05 17:14:08

回答

1

这是一个article,它说明了实现这一点的一种方法。但是,如果你想要ideomatic .NET然后BinaryReader是要走的路。如果格式不是强加的,而且您可以控制它,那么您也可以使用BinaryFormatter,但它产生的内容不可互操作。

0

假设这是一种自定义格式,我会(并且有)期待XmlReader API;我会写一个乘坐流的SomeFormatReader,并有一个读取下一个头的方法。一旦调用者看到这个返回值为真(假意味着EOF),调用者应该能够访问一个属性来检查后面的数据格式,并且能够调用ReadInt32,ReadString,ReadSingle等任何一个来处理每个二进制格式的规则)。在我的情况下,我的阅读器类也处理额外的数据缓冲等。

然后,您可以选择使用第二层使用类型元数据和新编写的阅读器来填充对象模型(任何反射,代码生成,元编程等)。但是创造一个好的独立读者是他的第一个障碍。

相关问题