谷歌协议缓冲区反序列化类型

3
我可以帮助您翻译如何从字节中加载protobuf并检索其类型。
例如:
Worklist work = Worklist.newBuilder().build();
byte[] msg = work.toByteArray();

基本上,我需要找到一种方法来检索消息类型,并应该打印工作列表。
谢谢。
1个回答

3
Protobuf消息本身不具备自我描述能力。在解析字节之前,您需要知道消息类型。在您的情况下,将解析字节数组msg的代码必须知道这些字节表示一个工作列表(Worklist),然后调用Worklist类中的解析实现。
但是如技术所述,您可以设计提供其元数据作为负载一部分的类。
[更新]
另一种方法-特别是当您使用protobuf创建发送/接收消息时,是定义一个顶级消息类。所有已发送/接收的消息都属于此类型。然后,对于可能包含在此消息中的各种内容(例如WorkItem),请使用protobuf扩展。我认为扩展的文档比自我描述消息更好。
双方都需要知道可用的扩展名,但是一旦解析了消息,就可以动态查询消息对象,以查看填充了哪些扩展名(例如WorkItem)。

自描述技术似乎是可行的方法,但我不知道如何使用它。对于这个特定的功能,文档相当贫乏。 - user1757189

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接