Сжатие небольшого фрагмента данных

У меня есть буфер размером, скажем, 4 КБ, содержащий данные в формате JSON. Мне нужно добавить к нему значительно больше информации (скажем, в 3 раза больше), но я должен уместить этот небольшой кусок памяти. Я думал об использовании libZ для сжатия текста, но боюсь, что он не будет работать хорошо, поскольку данные в основном состоят из некоторых уникальных подстрок. Что бы вы посоветовали в этой ситуации? Спасибо Крис


person k_wisniewski    schedule 15.08.2012    source источник


Ответы (2)


Рассмотрим фиксированный словарь, содержащий до 32 КБ строк, которые, как вы ожидаете, появятся в ваших данных. Вы должны использовать deflateSetDictionary() и inflateSetDictionary() zlib на каждом конце (отправитель и получатель данных соответственно) с одним и тем же словарем. на обоих концах. Это может дать вам сжатие, которое вы ищете. Без словаря вы вряд ли получите такое сжатие с таким небольшим объемом данных.

person Mark Adler    schedule 15.08.2012

Если вы действительно хотите придерживаться сжатия, лучше всего подойдет алгоритм сжатия, который использует настраиваемый словарь, который использует конкретную структуру ваших данных. Что-то подобное я реализовал с помощью SharpZipLib.

Если вы хотите хранить больше данных в буфере и не зацикливаетесь на сжатии текстовых данных, рассмотрите возможность использования бинарного протокола, такого как буферы протокола Google.

Обновить

Ответ @Mark описывает, как использовать собственный словарь с zlib.

person Eric J.    schedule 15.08.2012