代码之家  ›  专栏  ›  技术社区  ›  Mike J

字节序列化

  •  1
  • Mike J  · 技术社区  · 15 年前

    我最近与一位同事讨论了通过网络对字节数据进行序列化的问题。 他用了 BinaryFormatter 类来“解除”我发送给他的字节数据。这不起作用,他显然 例外 …例外情况。 Binaryformatter 因为我的数据只是一个字节数组,所以无法正确地“解除”数据。

    他的动机 二进制格式 是平台独立性。我不相信这种立场。当我们都使用 BinaryReader BinaryWriter ,代码区的情况很好。

    因此有什么用途 二进制格式 我是否应该考虑在每个场景中使用它,在需要通过线路发送字节的地方?

    2 回复  |  直到 15 年前
        1
  •  2
  •   Mehrdad Afshari    15 年前

    当然,如果你的数据 byte[] , BinaryFormatter 不是明智之举。你只要把数据写在电线上就行了。但是,如果您有一组对象,并且希望将它们序列化为流, 二进制格式 比手动编写每种类型的每个字段容易得多。目的 二进制格式 或者任何序列化程序/反序列化程序方案通常都是提供一种将对象图(可能很复杂)持久化为字节序列的方法。

        2
  •  2
  •   Marc Gravell    15 年前

    在我看来,你可能想看看“协议缓冲区”,它(不像 BinaryFormatter )是高性能、低带宽, portable/cross-platform ,允许版本的二进制序列化格式(哇,真是一口)。

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

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

    二进制格式 非常…易碎的;它是.NET特有的,并且具有相对较差的版本公差。我唯一一次使用它是在幕后交流 AppDomain 在同一台机器上。否则,我将研究基于契约的序列化程序,例如 XmlSerializer , DataContractSerializer 或Protobuf网。