如何比较两个 Google Protocol Buffer 消息的内容是否相等?

use*_*332 4 python protocol-buffers

我似乎无法在 API 中找到比较方法。我有这两条消息,它们有很多不同的值,有时会深入到更多值(例如,我有一个消息,其中包含一个字符串、一个整数和一个 custom_snapshot,其中 custom_snapshot 由一个 int、一个字符串等)。我想看看这两个消息是否相同。我不想一个一个比较每个值,因为这需要一段时间,所以我想知道在 Python 中是否有一种快速的方法来做到这一点?

我尝试做 messageA.debugString() == messageB.debugString(),但显然没有我尝试时可以访问的 debugString 方法。

Jan*_*sky 5

协议缓冲区有一个方法 SerializeToString()

用它来比较您的消息。

  • 比较字节的问题是字段允许以任何顺序出现在线路上,因此即使消息确实相同,您也可能会得到误报。如果您自己序列化消息,那么序列化程序将始终按相同的顺序放置字段。但这不适用于未知字段,并且一般来说,当您没有模式时,不可能“规范化”protobuf 数据。因此,如果存在未知字段,您可能会得到漏报。 (2认同)
  • 如果您要为此使用“SerializeToString”,则至少应该传递“确定性 = True”,以便对映射字段强制执行确定性排序。 (2认同)