Файл сжатия

У меня есть файл X байтов. И я хочу, например, сжать его в блок размером 32Kb. Есть ли либ, который я могу сделать это?

Я использовал Zlib для Delphi, но я просто могу сжать полный файл в новый сжатый файл.

Много шутит, педро

1 ответ

Решение

Почему бы вам не использовать простой заголовок для определения границ блоков? Учти это:

  1. Считать фиксированный объем данных из ввода в буфер (скажем, 32 КиБ)
  2. Сжатие этого буфера с помощью "недавно созданного" потока дефляции (базовый алгоритм сжатия ZLIB).
  3. Записать сжатый размер в выходной поток
  4. Запись сжатых данных в выходной поток
  5. Переходите к шагу 1, пока не дойдете до конца файла.

Плюсы:

  1. Вы можете распаковать любой блок даже в многопоточном режиме.
  2. Повреждение данных ограничивается только поврежденным блоком. Остальные данные могут быть восстановлены.

Минусы:

  1. Вы теряете большую часть контекстной информации (сходство между данными). Таким образом, у вас будет более низкая степень сжатия.
  2. Вам нужно немного больше работы.
Другие вопросы по тегам