Файл сжатия
У меня есть файл X байтов. И я хочу, например, сжать его в блок размером 32Kb. Есть ли либ, который я могу сделать это?
Я использовал Zlib для Delphi, но я просто могу сжать полный файл в новый сжатый файл.
Много шутит, педро
1 ответ
Решение
Почему бы вам не использовать простой заголовок для определения границ блоков? Учти это:
- Считать фиксированный объем данных из ввода в буфер (скажем, 32 КиБ)
- Сжатие этого буфера с помощью "недавно созданного" потока дефляции (базовый алгоритм сжатия ZLIB).
- Записать сжатый размер в выходной поток
- Запись сжатых данных в выходной поток
- Переходите к шагу 1, пока не дойдете до конца файла.
Плюсы:
- Вы можете распаковать любой блок даже в многопоточном режиме.
- Повреждение данных ограничивается только поврежденным блоком. Остальные данные могут быть восстановлены.
Минусы:
- Вы теряете большую часть контекстной информации (сходство между данными). Таким образом, у вас будет более низкая степень сжатия.
- Вам нужно немного больше работы.