2009-07-10 54 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。