如何比较两个Google协议缓冲区消息的内容是否相等?

8 投票
3 回答
15547 浏览
提问于 2025-04-18 10:18

我在这个API里找不到比较的方法。我有两个消息,它们有很多不同的值,有时候这些值还会进一步细分(比如,我有一个消息里面有一个字符串、一个整数和一个自定义快照,那个自定义快照又包含一个整数、一个字符串等等)。我想看看这两个消息是否相同。我不想一个一个值去比较,因为那样会花很多时间,所以我在想在Python里有没有快速的方法可以做到这一点?

我试着用messageA.debugString() == messageB.debugString()来比较,但显然我找不到可以用的debugString方法。

3 个回答

-2

你可以用equals方法来比较两个proto对象。

比如说:

 Object1.equals(Object2)

这个方法会检查Object1的内容是否和Object2的内容相等。如果你在任何proto中使用了枚举(enum),那么你需要保持它们的顺序。否则,因为顺序不匹配,它会返回false。

0

google.protobuf.text_format.MessageToString 是一个可以把proto消息转换成文本格式的工具。这样做的好处是,查看和比较文本格式的内容会比查看由 SerializeToString 生成的二进制字符串要简单得多。如果有不同之处,也更容易发现。此外,这个工具还有很多选项,比如可以选择忽略一些未知的字段。

7

协议缓冲区有一个方法叫做 SerializeToString(daterministic=True)

你可以用这个方法来比较你的消息。

撰写回答