java:使用位编码标记的存在
我有一个类a,它最多可以有50个标记,a的实例在一个存储为json+压缩的列表(想想几十万)中多次出现。标记名称和值为自由格式文本,每个长度最多1024个字符。同一列表中不同标签的不同数量上限为50 目前,我不打算转移到其他类型的编码,比如protobuf或使用不同的压缩算法 为了减少存储数据的大小,我考虑使用位编码来捕获某些标记的存在。例如,在序列化数据之前,扫描一个标记名的实例列表,收集所有标记名:tagValue集,并按如下方式为每个不同的标记分配编号java:使用位编码标记的存在,java,encoding,bit,Java,Encoding,Bit,我有一个类a,它最多可以有50个标记,a的实例在一个存储为json+压缩的列表(想想几十万)中多次出现。标记名称和值为自由格式文本,每个长度最多1024个字符。同一列表中不同标签的不同数量上限为50 目前,我不打算转移到其他类型的编码,比如protobuf或使用不同的压缩算法 为了减少存储数据的大小,我考虑使用位编码来捕获某些标记的存在。例如,在序列化数据之前,扫描一个标记名的实例列表,收集所有标记名:tagValue集,并按如下方式为每个不同的标记分配编号 1: tagA:valueA 2:
1: tagA:valueA
2: tagB:valueB
4: tagC:valueC
8: tagD:valueD
16: ...
每个实例都有表示位值的长字段,例如,如果A有tagA,tagC,tagD,它就有
long tagSet = 13; //(0001 | 0100 | 1000 = 13)
我还将维护一个字符串数组作为映射。这样,原始标记字符串就不会在每个实例中重复
有没有更好的方法来实现这一点,比如一些内置的java集合,甚至是完全不同的编码机制?您知道编译时可能的标记的完整集合吗?在这种情况下,您可以将标记建模为枚举值,并使用
java.util.EnumSet
存储它们;枚举集在内部使用位。编译时不知道它