java - Protobuf 映射的排序

标签 java protocol-buffers proto3

我在 proto3 中创建消息对象并使用自动生成的 java 类。 我想为每个消息对象分配唯一的键。

message Obj {
    ...
    string unique_key = 1;
    ...
}

Obj 的构造过程中,它从微服务接收到一个名为metaData 的原型(prototype)对象,其定义如下:

message metData {
     map<string, string> keyFields = 1;
}

基于 metaData 对象中的条目,unique_key 是通过遍历映射并对每个条目进行散列来创建的。(keyFields 中最多有 10 个条目)

protobuf 文档 says ,无法定义键的顺序。我应该如何保证 keyFields 中具有相同条目的不同 metaData 对象生成相同的 unique_key

最佳答案

通常有两种选择:

  1. 实现一个可交换哈希函数。例如。获取键的哈希值并简单地对它们求和而忽略溢出。
  2. 获取 key 并对它们进行排序。然后对它们进行哈希排序。如果有“很多”键,考虑缓存哈希值。

关于java - Protobuf 映射的排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63187818/

相关文章:

java - 在序列化之前检索 RabbitMQ 消息(审核)

java - 在 Java 中使用 proto3 时,对象中的长值未正确序列化和反序列化

python - 如何在 python 中编程 Protocol Buffer 以通过套接字发送消息

protocol-buffers - 如何在 ProtoBuf (gRPC) - Proto3 语法中将消息类型添加为对象?

java - Sonar 安装问题 : Unrecognized VM option '+HeapDumpOnOutOfMemoryError'

java - 获取 BindingResults 以显示与错误关联的字段

protocol-buffers - protobuf 获取一些数据的安全性如何?

protocol-buffers - Protobuf 消息/枚举类型重命名和线路兼容性?

android - 单元测试 proto3 生成的对象与验证

Java二维数组学习