У меня есть буфер размером, скажем, 4 КБ, содержащий данные в формате JSON. Мне нужно добавить к нему значительно больше информации (скажем, в 3 раза больше), но я должен уместить этот небольшой кусок памяти. Я думал об использовании libZ для сжатия текста, но боюсь, что он не будет работать хорошо, поскольку данные в основном состоят из некоторых уникальных подстрок. Что бы вы посоветовали в этой ситуации? Спасибо Крис
Сжатие небольшого фрагмента данных
Ответы (2)
Рассмотрим фиксированный словарь, содержащий до 32 КБ строк, которые, как вы ожидаете, появятся в ваших данных. Вы должны использовать deflateSetDictionary()
и inflateSetDictionary()
zlib на каждом конце (отправитель и получатель данных соответственно) с одним и тем же словарем. на обоих концах. Это может дать вам сжатие, которое вы ищете. Без словаря вы вряд ли получите такое сжатие с таким небольшим объемом данных.
Если вы действительно хотите придерживаться сжатия, лучше всего подойдет алгоритм сжатия, который использует настраиваемый словарь, который использует конкретную структуру ваших данных. Что-то подобное я реализовал с помощью SharpZipLib.
Если вы хотите хранить больше данных в буфере и не зацикливаетесь на сжатии текстовых данных, рассмотрите возможность использования бинарного протокола, такого как буферы протокола Google.
Обновить
Ответ @Mark описывает, как использовать собственный словарь с zlib.