2011-02-05 108 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等任何一個來處理每個二進制格式的規則)。在我的情況下,我的閱讀器類也處理額外的數據緩衝等。

然後,您可以選擇使用第二層使用類型元數據和新編寫的閱讀器來填充對象模型(任何反射,代碼生成,元編程等)。但是創造一個好的獨立讀者是他的第一個障礙。

相關問題