【问题标题】:How would you encode a Map<String, Object> using Protocol Buffers?您将如何使用协议缓冲区对 Map<String, Object> 进行编码?
【发布时间】:2009-07-09 09:51:52
【问题描述】:

我正在尝试使用Protocol Buffers 进行消息序列化。

我的消息格式应该包含 Map 条目...但是如何编写 .proto 定义?

据我所知,Protocol Buffers 没有内置的 Map 类型。我可以使用重复字段来模拟它。但我遇到的最大问题是,您需要定义所有类型。我希望我的消息灵活,所以我不能指定类型。

有什么想法吗?

【问题讨论】:

标签: java protocol-buffers amqp


【解决方案1】:

我会用一个键和一个值来建模一个元组(可能值可能是每种类型的一个值字段)。然后只需要该元组类型的重复列表。您需要在代码中构建地图本身。

当您说您无法指定类型时,您指的是哪种类型?如果您在元组中具有每种类型的可选字段,那么这将适用于所有原语 - 您可以通过将消息序列化为字节字符串来映射消息。

听起来你的“非结构化”水平可能不适合 PB。

【讨论】:

  • 听起来很合理......但我想你是对的:PB 看起来不太适合我的问题
  • @artuh - 你最终用什么来解决你的问题?
  • @FranzéJr.:鉴于您没有提出任何不同的要求,为什么您会期待不同的信息?协议缓冲区现在支持映射的概念,但不支持“通用消息” - 它必须是特定类型。
  • @Jon Skeet 现在在 Protobuf 3 中执行此操作的方法是使用其众所周知的 Struct 类型:developers.google.com/protocol-buffers/docs/reference/… 这将是今天执行此操作的“更好”方法,并且实际上是您在您的回答中描述。
  • @PragmaticProgrammer:Struct 非常适合 JSON 建模,因为它专门就是为了这个。另一个选项是Any,如果每个值实际上都是另一个 protobuf 消息。 (当然,protobuf 现在确实有地图......)
猜你喜欢
  • 1970-01-01
  • 2020-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多