考虑一下我有字节数组-byte [],它表示某种序列化的protobuf对象。有什么办法可以将其打印输出
1: 123
2: Jhon
3: Doe
4: 0
其中1是int字段,2和3是字符串,4是 boolean 值
TextFormat.print需要我提供protobuf对象的具体生成器,我不知道。
最佳答案
定义EmptyMessage
类型,例如:
message EmptyMessage {
// nothing
}
现在将您的消息解析为
EmptyMessage
,然后在其上调用toString()
。为什么这样做?好吧,考虑将字段添加到消息类型是向后兼容的。添加字段后,使用该字段向未使用该字段知识构建的旧程序发送消息,则该字段被视为“未知字段”。未知字段将打印为数字/值对。现在,如果您从
EmptyMessage
开始并添加字段,那么显然可以得到任何其他消息。因此,所有消息类型都与EmptyMessage
“向后兼容”。因此,任何消息都可以解析为EmptyMessage
,以将所有字段视为未知字段。