出于记录目的,我需要将google协议缓冲区消息的内容写入日志输出(java)。 Haven还找不到办法。
我找到了TextFormat,但TextFormat需要一个MessageOrBuilder实例。我目前需要打印的消息并没有扩展MessageOrBuilder,它扩展了GeneratedMessageLite并实现了MessageLiteOrBuilder。
任何想法如何从这条消息中获得漂亮或至少人类可读的字符串表示?
答案 0 :(得分:2)
听起来你在" lite模式"中使用Protobuf,即你的.proto
文件包含option optimize_for = LITE_RUNTIME;
。 Lite模式删除Protocol Buffers的所有内省功能,TextFormat依赖于这些内省功能。因此,如果您希望能够使用.toString()
(并获得有用的结果),则需要从精简模式更改为常规模式。
这意味着启动库会更大更慢。不幸的是,真的没办法解决这个问题。如果你想要内省/字符串化,这就是成本。
您可能会考虑其他一些选项:
protoc --decode
或您自己编写的工具。答案 1 :(得分:0)
您的protobuf对象上有一个构建器对象。
例如:YourClass.Builder
其中option java_outer_classname = "YourClass"
protobuf desciptor文件应包含此示例中的消息类型TestMessage
,例如:
package test;
option java_package="test.package";
option java_outer_classname = "YourClass"
message TestMessage {
fields here
}