Google ProtocolBuffer反序列化类型

时间:2012-10-18 18:07:11

标签: java protocol-buffers

我想知道如何检索从字节加载的protobuf的类型。

例如:

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

基本上我需要找到一种方法来检索msg类型,并且应该打印工作列表。

感谢。

1 个答案:

答案 0 :(得分:3)

Protobuf消息本身并不是自我描述。在解析字节之前,您需要知道消息类型 。在您的情况下,有关解析字节数组msg的代码必须知道这些字节代表工作列表,然后在Worklist类中调用解析实现。

但是如Techniques中所述,您可以设计将元数据作为有效负载的一部分提供的类。

[更新]

另一种方法 - 特别是当您使用protobuf创建发送/接收消息时,是定义顶级消息类。所有发送/接收的消息都属于这种类型。然后,对于此消息中可能包含的各种类型的内容(例如WorkItem),请使用protobuf扩展。我认为extensions上的文档比自我描述消息要好一些。

双方都需要知道可用的扩展,但是一旦解析了消息,就可以动态查询消息对象,看看哪些扩展(如WorkItem)已被填充。