[英]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.