繁体   English   中英

如何比较 protobuf 消息

[英]How to compare protobuf message

在这篇文章: Google protocol buffers compare中,我看到了几种比较 C++ 中 protobuf 消息的方法。

我尝试使用msg.DebugString()SerializeToString()MessageDifferencer::Equal()进行负载比较。 这三种方法给出了不同的结果:

DebugString显示两个消息相等,而另外两个显示不相等。

由于消息太长(>2000 字节),并且是多层递归,因此很难直接看出差异。

有人知道这些方法有什么区别,最好选择哪种?

MessageDifferencer可能是最安全的方法,因为地图之类的东西在消息中可能具有不确定的顺序。 但是您可能希望使用Equivalent()而不是Equal() ,因为前者不那么迂腐(例如,允许在缺失字段中使用默认值)。

您可以处理生成的报告条目,例如,如果顺序对您处理数据的方式不重要,则忽略已在消息中移动的字段。

选择MessageDifferencer::Equal()

不能保证序列化是确定性的,即相同的消息可能会因任何原因而被不同地序列化(例如,在大多数情况下字段顺序可能不同)(它可能明显不同库版本,但例如解析序列化往返可能会保留字段顺序,因此不会取消差异)。

DebugString看起来像是用于调试,而不是用于比较,所以我什至不会考虑它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM