2017-03-10 17 views
1

examples解析是由像:當你不知道什麼是具體的消息類型時,如何使用Protocol Buffers從InputStream解析?

AddressBook addressBook = AddressBook.parseFrom(new FileInputStream(args[0])); 

但是這意味着你必須知道什麼是預期消息的類型。

我在.proto文件中定義,如「登錄」,「註銷」等不同的消息和生成的Java文件。

你是如何處理的時候你不知道什麼是具體的消息,是即將到來的情況呢?你如何解析它(例如從InputStream)?

生成的文件中是否有一些通用的parse方法「自動」決定如何解析消息並返回MessageMessageLite

+0

有沒有這方面的'automagical'。你可以設計你的系統來識別/處理多種消息格式(例如XML,JSON等),但是你大多需要自己去做。 – ControlAltDel

+0

我不使用XML/JSON等多種消息格式。我使用默認的二進制writeTo()方法。但是當我做'LoginMessage.writeTo'如何知道它是一個正在添加LoginMessage這樣我就可以用'LoginMessage.parseFrom()'另一端? – Ognyan

回答

1

的Protobuf基本上是一個序列化API。所以沒有通用的方式來「知道」它是哪個消息。

我會嘗試使用消息報頭唯一地識別每個消息類型。也許這對你來說已經足夠了。

+0

是的,我已經這麼做了。我爲此類型的原始msg和int值創建了'Any'類型的'MessageContainer'消息。然後,我使用MessageRegister將所有消息註冊到所提及的整型'type'中,並使用具體的類型進行打包/解包。我只是希望有一個現有的解決方案。 – Ognyan

相關問題