2012-10-18 47 views
3

我想知道如何檢索從字節加載的protobuf的類型。Google協議緩衝區反序列化類型

例:

Worklist work = Worklist.newBuilder().build(); 
byte[] msg = work.toByteArray(); 

基本上我需要找到一種方法來檢索味精類型,應打印工作表。

謝謝。

回答

3

Protobuf消息不是固有的自我描述。您需要知道之前的消息類型,您解析字節。在你的情況下,解析字節數組msg的代碼必須知道這些字節表示一個Worklist,然後調用Worklist類中的解析實現。

但是,如Techniques中所述,您可以設計將其元數據作爲有效負載的一部分提供的類。

[更新]

另一種方法 - 特別是當使用的protobuf用於發送創建的消息/接收是定義一個頂層消息類別。所有發送/接收的消息都屬於這種類型。然後,對於此消息中可能包含的各種類型的內容(例如WorkItem),請使用protobuf擴展。我認爲extensions上的文檔比自描述消息要好一些。

雙方都需要知道可用的擴展,但一旦你已經解析了消息,你可以動態查詢消息對象,看看哪些擴展(如工作項)已填寫。

+0

自我描述的技術似乎要走的路,但我不知道如何使用它。該文檔對於這個特殊功能來說很差。 – user1757189

+0

同意 - 請參閱更新另一種方法。 –

+0

好主意,工作正常:) – user1757189