Самый эффективный алгоритм сжатия папок с файлами - PullRequest
3 голосов
/ 22 февраля 2011

У меня есть папка с файлами, и я хотел бы максимально эффективно сжать ее без потерь.

Файлы очень похожи друг на друга тем, что основная полезная нагрузка точно такая же, но заголовок и нижний колонтитул переменного размера могут существенно отличаться между файлами.

Мне нужно иметь возможность очень быстро получить доступ к любому из файлов, а также очень быстро добавить дополнительные файлы (не нужно распаковывать всю папку, просто чтобы добавить файл для повторного сжатия).Удаление из папки не очень распространено.

Алгоритмические предложения хороши, хотя я бы предпочел просто использовать некоторые существующие библиотеки / программы для этой задачи.

Ответы [ 3 ]

3 голосов
/ 22 февраля 2011

В этом случае, поскольку у вас есть определенные знания о файлах, лучше всего подойдет нестандартное решение.Сохраните статическую основную полезную нагрузку только один раз, а затем сохраните верхние и нижние колонтитулы отдельно.Например, у вас есть 3 файла:

1.dat
2.dat
3.dat

Сохраните их в сжатом файле как:

payload.dat
1.header.dat
1.footer.dat
2.header.dat
2.footer.dat
3.header.dat
3.footer.dat

Что касается добавления файлов, Zip и 7zip поддерживают добавление новых файлов всуществующий архив, так что вы можете использовать любой из них и просто добавлять новые файлы по мере необходимости.Лично я бы порекомендовал 7zip, поскольку я обнаружил, что в большинстве случаев он обеспечивает гораздо лучшие коэффициенты сжатия, но сильно варьируется в зависимости от конкретного содержимого.

1 голос
/ 22 февраля 2011

Когда-то это было 7zip , не уверен, что было сделано что-то новое.

0 голосов
/ 22 февраля 2011

При таком типе избыточных данных большинство стандартных программ сжатия должны давать очень удовлетворительные результаты. НЕ используйте для этого стандартный Windows-генератор .zip, поскольку он сжимает каждый файл отдельно. 7zip или Gzip отлично подойдут для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...