簡體   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