Сжатый файл

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

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

Много транков, Педро


person p.magalhaes    schedule 03.06.2010    source источник
comment
Какой язык программирования вы собираетесь кодировать?   -  person Ranhiru Jude Cooray    schedule 03.06.2010
comment
Поскольку вы упомянули Delphi, я предполагаю, что вы нацелены на Windows. Я не уверен, что это соответствует вашим потребностям, но NTFS поддерживает прозрачное сжатие файлов из коробки. Он уже разбивает сжатые файлы на небольшие блоки, поэтому производительность произвольного доступа не сильно страдает.   -  person Alex Jasmin    schedule 03.06.2010


Ответы (1)


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

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

Плюсы:

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

Минусы:

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