2009-07-10 58 views
1

我最近和一位同事討論了網絡上字節數據的串行化問題。 他使用BinaryFormatter類來「解開」我發送給他的字節數據。這不起作用,他顯然有例外 ...例外。由於我的數據只是一個字節數組,因此Binaryformatter無法正確「解開」數據。字節序列化

他對BinaryFormatter的動機是平臺獨立性。我不相信這樣的立場。當我們都使用BinaryReaderBinaryWriter時,事情在代碼土地上運行良好。

因此,BinaryFormatter的用途是什麼?我應該在每個需要通過電線發送字節的場景中使用它嗎?

回答

2

當然,如果您的數據爲byte[],BinaryFormatter不是明智的選擇。您只需將數據寫入電線即可。但是,如果您有一組對象並想將它們序列化爲流,則使用手工編寫每種類型的每個字段比使用BinaryFormatter要容易得多。一般而言,BinaryFormatter或任何串行器/解串器方案的目的是提供一種將對象圖(可能是複雜的)保持爲字節序列的方式。

2

這聽起來像你可能想看看像「協議緩衝區」,這(不像BinaryFormatter)是一個高性能,低帶寬,portable/cross-platform,版本容忍二進制序列化格式(哇,這是一個滿口)。

幸運的是,.NET中有版本,如protobuf-net

(披露:我是作者,但它是免費的,我不是想賣給你任何東西 - 只爲您節省大量的時間和疼痛)

BinaryFormatter很...變脆;它是.NET特有的,並且具有相對較差的版本容差。我使用它的唯一時間是在同一臺機器上的AppDomain之間進行通信的幕後。否則,我會看基於合同的序列化程序,如XmlSerializer,DataContractSerializer或protobuf-net。