2013-11-27 57 views
2

我有一些序列化在谷歌protobuf在一系列的文件,但不知道是否有一個快捷方式將這些較小的文件連接成一個較大的protobuf而不必擔心閱讀每一個protobuf和然後將這些對象分組並輸出。Protobuf串行化消息到一個文件

有沒有一種廉價的方式來加入文件?即我有序列化每個單獨的文件嗎?

回答

1

除了jpa的回答之外,說出數據不需要在序列化時完全在同一個容器中,因爲它與反序列化相兼容。

考慮以下消息:

message FileData{ 
    required uint32 versionNumber = 1; 
    repeated Data initialData = 2; 
} 

message MoreData{ 
    repeated Data data = 2; 
} 

是可能的序列的那些不同的消息到一個單一的數據容器和零個或多個MoreData之前反序列化作爲單個FileData消息,只要FileData被序列並且兩者FileDataMoreData對於重複字段具有相同的索引。

1

您可以通過簡單的連接組合協議緩衝區消息。看來,你想要的結果,形成一個數組,所以你需要序列化每個單獨的文件作爲一個數組本身:如果您序列的每個文件作爲MyCollection

 
message MyItem { 
    ... 
} 

message MyCollection { 
    repeated MyItem items = 1; 
} 

現在,然後將它們連接起來(只放原始二進制數據),生成的文件可以作爲一個大集合本身讀取。

+2

準確地說,連接編碼的protobufs然後解析結果相當於如果分別解析它們並執行'first.MergeFrom(second)'。 –

相關問題