Java: кодирование наличия тега с использованием бита - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть класс 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 или даже совершенно другой механизм кодирования?

...