3

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

前任:

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

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

谢谢。

4

1 回答 1

3

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

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

[更新]

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

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

于 2012-10-18T18:09:27.713 回答