协议缓冲区扩展和 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()的主要内容,如果未能解决你的问题,请参考以下文章

iOS 网络 - Moya 和协议缓冲区序列化

协议缓冲区(Protocol Buffers)

例外:读取 XML 时没有协议

在 Node 中的缓冲区上调用 toString 时出现意外结果

如何读取缓冲区的前 n 个字节并在 NodeJS 中转换为字符串?

JS:为什么fs.readFileSync()返回缓冲区,即使我之前使用toString()将其转换为字符串?