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