【问题标题】:Does serializing distinct but equal object graphs with BinaryFormatter produce same binary representation?使用 BinaryFormatter 序列化不同但相等的对象图是否会产生相同的二进制表示?
【发布时间】:2011-08-12 23:25:41
【问题描述】:

我正在研究基于对象模型的序列化散列。

如果我使用 .NET BinaryFormatter 序列化一个对象图,对于所有涉及的对象都由相同值组成的另一个对象图,序列化表示是否保证字节对字节完全相同?

直觉上,我是这么认为的,但我不确定对象/引用 ID 是否会以某种方式影响实际的序列化表示。

提前致谢。

【问题讨论】:

    标签: .net serialization binaryformatter


    【解决方案1】:

    我不知道这是保证,并且由于缺乏书面保证,我不会个人依赖它。特别是:

    • 任何实现ISerializable(即自定义序列化)的东西都可以随心所欲
    • 任何涉及字典之类的东西都可能不可靠 - 仅仅是因为字典中没有定义的顺序,而且它可能取决于原始空间与重组后的空闲空间等
    • 平台、版本等之间可能存在细微的兼容但不相同变化

    但是,如果您在谈论二进制等价,我推断您正在谈论BinaryFormatter 数据的存储,以及稍后的后续比较。请允许我强调:IMO,BinaryFormatter 不适合存储;在共享平台和应用程序版本的运行系统之间传输数据是可以的(ish),但是由于版本差异和BinaryFormatter,我看到人们陷入困境的绝对数量是压倒性的。 出于这些原因,我对 protobuf 产生了兴趣,并编写了我自己的序列化程序,适用于存储和再水化现有对象模型,这些模型已经“版本化”了临时。

    【讨论】:

    • 感谢您的反馈,您的注意事项已得到适当注意。澄清一下:我不打算使用 BinaryFormatter 进行存储,而是作为实现确定 2 个对象模型是否相等的潜在捷径,在价值意义上。即,我会将其输出用作哈希算法的输入。
    • @Cumbayah 说实话会让人有点紧张。我可能会考虑一些具有已知输出的东西,例如 json - 并对其进行散列。
    • 如果你还没有看过这个项目,你可能有兴趣看看这个项目:db4o.com
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多