考虑一下我有字节数组-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,以将所有字段视为未知字段。

09-05 04:26