У меня есть класс A, который может иметь до 50 тегов, и экземпляры A появляются много раз в списке (например, несколько сотен тысяч), который хранится как сжатый json +.Теги name и value являются текстом произвольной формы, длиной до 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 или даже совершенно другой механизм кодирования?