我想在我的程序中使用協議緩衝區來讀取文件中的數據。我還希望能夠使用任何文本編輯器編輯數據文件,以便開始使用(稍後我將編寫數據編輯器,並切換到完整的二進制文件)。協議緩衝區能否以「調試字符串」格式解析消息?
是否有解析人類可讀格式的方法? (由protobuf本身提供的調試字符串,或其他格式)。
我想在我的程序中使用協議緩衝區來讀取文件中的數據。我還希望能夠使用任何文本編輯器編輯數據文件,以便開始使用(稍後我將編寫數據編輯器,並切換到完整的二進制文件)。協議緩衝區能否以「調試字符串」格式解析消息?
是否有解析人類可讀格式的方法? (由protobuf本身提供的調試字符串,或其他格式)。
也有一種基於文本的格式,但對此的支持是特定於實現的。例如,我不支持在protobuf-net中的所有。但是:是這樣定義的,並在這裏討論(例如):http://code.google.com/apis/protocolbuffers/docs/reference/cpp/google.protobuf.text_format.html
就個人而言,我寧願使用二進制編寫模型周圍的用戶界面。
您確定要使用ProtoBuf嗎?您可以首先使用Json,然後切換到Bson或MessagePack作爲二進制格式。
Json/Bson組合的優點是可以爲它們使用相同的庫(Json.net)。不過,我相信Bson比ProtoBuf要大一些。
或者你可以使用Json/MessagePack。技術上MessagePack比Bson/ProtoBuf IMO更好的二進制格式。但是工具支持更糟,您需要爲Json和MessagePack提供單獨的庫。它支持Json所做的所有事情(特別是它可以在字典中同時使用字符串和整數鍵)。
MsgPack和protobuf的快速比較:
感謝您的選擇,但我會嘗試protobuf。所有解決方案都非常相似,滿足我的需求,所以我只是隨意選擇一個解決方案。 – Gnurfos
我很好奇:你看到MsgPack中的流氓更好嗎? –
@Marc這更多的自我描述絕對是一大優勢。在ProtoBuf中,我甚至沒有看到是否是子消息或blob。非整數字典鍵也不錯。對於其他差異相對較小,但在其中大多數我稍微喜歡MsgPack。 – CodesInChaos
如果不使用命令行工具胸懷,Piqi project包括4種格式之間的轉換piqi convert命令:二進制協議緩衝器,JSON,XML和Piq。 Piq格式專門用於在文本編輯器中查看和編輯數據。
該問題沒有指定編程語言,我的答案只是關於Java。
在Java中,Message
實例的toString
方法返回人類可讀的文本格式。同樣的格式,然後可以通過TextFormat.merge
分析爲Message
實例:
String messageString = ...
MyMessage.Builder builder = MyMessage.newBuilder();
TextFormat.merge(messageString, builder);
MyMessage newMessage = builder.build();
(Variations of the merge
method還可以從流中讀取,避免讀取整個消息字符串到內存中。)
謝謝!這會做,因爲這是暫時的。在這一點上我不需要可移植性和長期兼容性,如果需要,我會在稍後編寫一個編輯器。 – Gnurfos