为什么 Protocol Buffers 比 .NET 二进制序列化好得多?

Why is Protocol Buffers so much better than .NET binary serialization?

为什么 Protocol Buffers 比 .NET 二进制序列化好得多?我只能找到谈论它有多好(在性能和尺寸方面)的比较,但我找不到原因。是否可以在不涉及太多细节的情况下至少部分地进行解释?

最重要的原因是二进制序列化(BinaryFormatter)是脆弱的。它对确切的类型名称等进行编码,使其无法用于存档数据,例如应用程序的文档格式。

其他原因包括性能、平台可用性等。

如果您没有任何性能问题(即消息很小),并且您只想临时存储或传递一些数据块,那么它会很有用。例如 - 对于在同一台计算机上的桌面应用程序的两个实例之间传递小消息,它可能很有用,因为您不必仅为该任务添加另一个库。

因为BinaryFormatter在序列化后的数据中存储了类型和属性信息,所以比较大,所以比较慢。

ProtoBuf 将其移至应用程序端,因此序列化器和反序列化器都必须确切地知道它们在做什么,并在代码中指定它们想要反序列化到的类型和属性。