1

我最近与一位同事讨论了通过网络对字节数据进行序列化的问题。他使用BinaryFormatter该类“解析”我发送给他的字节数据。这不起作用,他显然有特殊的......例外。Binaryformatter无法正确“解析”数据,因为我的数据只是一个字节数组。

他的动机BinaryFormatter是平台独立性。我不相信这样的立场。当我们都使用BinaryReaderorBinaryWriter时,事情在代码领域运行良好。

因此,BinaryFormatter我应该在需要通过线路发送字节的每个场景中使用它吗?

4

2 回答 2

2

当然,如果您的数据为byte[]BinaryFormatter则使用起来不是明智之举。您只需将数据写入网络。但是,如果您有一组对象并希望将它们序列化为流,BinaryFormatter则使用起来比手动编写每种类型的每个字段要容易得多。一般来说,任何序列化器/反序列化器方案的目的BinaryFormatter是提供一种将对象图(可能很复杂)持久化为字节序列的方法。

于 2009-07-10T21:24:13.450 回答
2

在我看来,您可能想看一下“协议缓冲区”之类的东西,它(不像BinaryFormatter)是一种高性能、低带宽、可移植/跨平台、版本容错的二进制序列化格式(哇,那是一口)。

幸运的是,.NET 中有一些版本,例如protobuf-net

(披露:我是作者,但它是免费的;我不是想卖给你任何东西——只是为你节省很多时间和痛苦)

BinaryFormatter非常……易碎;它是 .NET 特定的,并且版本容错性相对较差。AppDomain我唯一一次使用它是在同一台机器上的 s之间进行通信的幕后。否则,我会查看基于合约的序列化程序,例如XmlSerializerDataContractSerializer或 protobuf-net。

于 2009-07-10T21:48:22.403 回答