ProtoBuffer 中的实例?,java,protocol-buffers"/>

首页 > 解决方案 > 如何表示一个 HashMapProtoBuffer 中的实例?

问题描述

我需要在协议缓冲区模式中包含以下类的实例作为字段:

public final class Metrics extends HashMap<Object, Double> {
}

但是当我添加类似的内容时:

map<bytes, double> metrics = 2;

我有效地得到了消息Map key cannot be float, double, bytes, message, or enum types

我想到的一种方法是将对象(键)转换为字节,然后转换为 base64 键以创建一个新映射,这将是要发送到线路的实际映射(然后在到达另一边)。但这似乎太昂贵了,我觉得我必须为每个条目创建一个输入流的实例(并关闭它们)。

这种情况有已知的方法吗?你会怎么做?我没有找到任何这样的例子。

谢谢

标签: javaprotocol-buffers

解决方案


您可以使用键值对列表来模拟映射(这是在 proto3 中引入映射并将它们反向移植到 proto2 之前完成的方式):

message Metric {
  bytes key = 1;
  double value = 2;
}

repeated Metric metrics = 2;

推荐阅读