协议缓冲区扩展和 toString()
Posted
技术标签:
【中文标题】协议缓冲区扩展和 toString()【英文标题】:protocol buffer extensions and toString() 【发布时间】:2014-07-29 03:29:49 【问题描述】:我正在使用一些具有扩展名的协议缓冲区 (java)。我似乎能够解析序列化的协议缓冲区(无论如何都没有错误),但出于调试目的(又一个问题),我将它们打印到日志中。
我在日志中发现了这些类型的东西:
data_config
format: FORMAT_DELIMITED
1024: "\022\001\n"
这是消息定义:
message DataConfig
optional DataFormat format = 1;
extensions 1024 to max;
option (dwhio.data.message_reflection_config) = reflect_extensions: true ;
我的问题是“日志中带有 '1024' 的调试字符串是否正确(预期)或表示类加载或其他问题?”
我还没有想出一种方法来打印到涉及注册表的字符串,只是“合并”,所以我假设这没有必要?
【问题讨论】:
【参考方案1】:问题可能是您在从二进制文件中解析消息时没有提供ExtensionRegistry
。因此,扩展名被视为未知字段。当您稍后打印消息时,扩展名仍然未知,因此如您所见打印。解决方案是在解析时提供注册表,例如DataConfig.parseFrom(bytes, registry)
.
【讨论】:
所以.. 你有没有想过我这周应该下班待在家里?真的..我不应该尝试着感冒编码。据我所知,大脑完全停止运作。 Kenton,你说得对。我正在使用扩展注册表,但在另一个地方我正在重构一个 protobuf,没有扩展注册表。谢谢。以上是关于协议缓冲区扩展和 toString()的主要内容,如果未能解决你的问题,请参考以下文章
在 Node 中的缓冲区上调用 toString 时出现意外结果