2008-11-05 2 views
3

This question on archiving PDF's заставил меня задуматься - если бы я хотел сжать (для архивных целей) множество файлов, которые по существу небольшие изменения, сделанные поверх шаблона-шаблона (бланки), похоже, сжатие файла.Какие форматы сжатия/архива поддерживают сжатие между файлами?

Поддерживает ли это какой-либо стандартный формат сжатия/архивирования? AFAIK, все популярные форматы сосредоточены на сжатии каждого отдельного файла.

ответ

5

В некоторых форматах выполняется сжатие между файлами.

Самый старый пример: .tar.gz; .tar не имеет сжатия, но объединяет все файлы вместе с заголовками перед каждым файлом, а .gz может сжать только один файл. Оба применяются последовательно, и это традиционный формат в мире Unix. .tar.bz2 то же самое, только с bzip2 вместо gzip.

Более свежие примеры - это форматы с дополнительным «твердым» сжатием (например, RAR и 7-Zip), которые могут скомпоновать все файлы перед сжатием, если они включены с помощью флага командной строки или графического интерфейса.

2

Поскольку сжатие LZW (что в значительной степени используется всеми) включает в себя создание таблицы повторяющихся символов, как вы идете вперед, например, схема, как вы хотите, ограничит вас необходимостью распаковать весь архив за один раз.

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

+0

Итак, в основном, «двойной-zipping» (zip zip-файл)? – Toybuilder 2008-11-05 19:09:01

+0

Нет, оригинальный zip-файл, сделанный из отдельных сжатых «капель», второй проход не найдет хороших повторений. – 2008-11-05 19:16:22

3

Взгляните на открытый vcdiff google.

http://code.google.com/p/open-vcdiff/

Он предназначен для вычисления небольших сжатых дельт и реализует RFC 3284.

http://www.ietf.org/rfc/rfc3284.txt

Microsoft имеет API для делать что-то подобное, рубленый любое подобие стандарта.

В целом алгоритмы вы ищете являются те, основанными на Bentley/Макилре:

http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.11.8470

В частности, эти алгоритмы будут выигрышем, если размер шаблона больше размера окна (~ 32k), используемый gzip или размером блока (100-900 k), используемым bzip2.

Они используются компанией Google внутри своей реализации BIGTABLE для хранения сжатых веб-страниц по той же причине, которую вы ищете.

Смежные вопросы