我想知道如何检索从字节加载的protobuf的类型。
例如:
Worklist work = Worklist.newBuilder().build();
byte[] msg = work.toByteArray();
基本上我需要找到一种方法来检索msg类型,并且应该打印工作列表。
感谢。
答案 0 :(得分:3)
Protobuf消息本身并不是自我描述。在解析字节之前,您需要知道消息类型 。在您的情况下,有关解析字节数组msg的代码必须知道这些字节代表工作列表,然后在Worklist类中调用解析实现。
但是如Techniques中所述,您可以设计将元数据作为有效负载的一部分提供的类。
[更新]
另一种方法 - 特别是当您使用protobuf创建发送/接收消息时,是定义顶级消息类。所有发送/接收的消息都属于这种类型。然后,对于此消息中可能包含的各种类型的内容(例如WorkItem),请使用protobuf扩展。我认为extensions上的文档比自我描述消息要好一些。
双方都需要知道可用的扩展,但是一旦解析了消息,就可以动态查询消息对象,看看哪些扩展(如WorkItem)已被填充。