首页 > 解决方案 > java:使用位编码标签的存在

问题描述

我有一个 A 类,它最多可以有 50 个标签,并且 A 的实例在存储为 json + 压缩的列表中多次出现(想想几十万)。标签名称和值是自由格式的文本,每个最多 1024 个字符。同一列表中不同标签的数量上限为 50。

目前,我不打算转向其他类型的编码,例如 protobuf 或使用不同的压缩算法。

为了减少存储数据的大小,我正在考虑使用位编码来捕获某些标签的存在。例如,在序列化数据之前,扫描 A 的实例列表并收集所有 tagName:tagValue 集并将编号分配给每个不同的标签,如下所示

1: tagA:valueA
2: tagB:valueB
4: tagC:valueC
8: tagD:valueD
16: ...

并且每个实例都有表示位值的长字段,例如,如果 A 有 tagA、tagC、tagD,它将有

long tagSet = 13; //(0001 | 0100 | 1000 = 13)

我还将维护一个字符串数组作为映射。这样,原始标签字符串不会在 A 的每个实例中重复。

有没有更好的方法来做到这一点,例如一些内置的 java 集合甚至完全不同的编码机制?

标签: javaencodingbit

解决方案


推荐阅读