Как я могу оценить лучший выбор формата архива для сжатия файлов?
В общем, я заметил следующее:
- Файлы или инструменты Linux-y используют bzip2 или gzip для распространения архивов
- Windows-ы файлы или инструменты используют ZIP для распространения архивов
- Многие люди используют 7-Zip для создания и распространения своих собственных архивов.
Вопросы:
- Каковы преимущества и недостатки этих форматов, которые кажутся открытыми? Когда / почему я должен выбрать один (скажем, 7-Zip) вместо другого (скажем, ZIP)?
- Почему вышеприведенная тенденция сохраняется, хотя все это портативные форматы? Есть ли какие-то конкретные преимущества использования определенного формата архива на конкретной платформе?
6 ответов
Существует большое разнообразие форматов и методов сжатия, некоторые из них не сжимаются вообще и предназначены для хранения нескольких файлов в одном архиве, а другие более новые экспериментальные компрессоры (на основе PAQ) предназначены для сжатия настолько агрессивно, насколько это возможно, независимо от времени, которое требуется для выполнения указанной операции.
Вам необходимо оценить функции, которые вам требуются, по вашему выбору метода сжатия, а также рассмотреть контекст, в котором он будет использоваться.
Различные особенности и соображения включают в себя:
- Способность к сжатию - Достаточно ли значительно сокращает файл?
- Простота использования - если файл передается другому пользователю, архив будет легко распаковать или потребуется установить больше программного обеспечения?
- Защита паролем и / или шифрование. Требуются ли эти меры безопасности?
- Поддержка нескольких томов - если целевой носитель требует, чтобы файл был разбит на соответствующие куски, формат поддерживает это элегантно. Например, 650 МБ на CD.
- Восстановление и восстановление - если файл становится частично поврежденным, предлагает ли он запись восстановления, чтобы помочь восстановлению данных?
- Поддержка Unicode - Поддерживает ли архиватор международные имена файлов или только стандартный ASCII?
- Системные требования. Современные компрессоры, такие как 7-Zip, предлагают возможность повысить эффективность сжатия, используя больший словарь (словарь является ссылкой на часто повторяющиеся данные в сжатом файле), но это, в свою очередь, увеличивает потребление памяти как при сжатии, так и при сжатии. время декомпрессии.
- Поддержка самораспаковки - можно ли свернуть архив в исполняемый файл, который обеспечивает простоту использования для тех, кто в нем нуждается? (Также имейте в виду, что вы можете создать самораспаковщик только для одной платформы. Вообще говоря, самораспаковщик Windows не будет работать в Linux по умолчанию, если только он не проходит через слой совместимости, такой как Wine).
- Атрибуты файловой системы - хранит ли компрессор соответствующие метаданные и разрешения файловой системы, которые, возможно, стоит сохранить в момент извлечения?
Вообще говоря, ZIP является наиболее распространенным форматом, но размеры более 4 ГБ, как правило, не поддерживаются (если вообще), поддержка безопасности обычно считается плохой (стандартный пароль может быть скомпрометирован с помощью атаки открытым текстом, и дальнейшее шифрование обычно реализуется как неофициальная производная формата коммерческими поставщиками программного обеспечения ZIP).
Кроме того, большинство других популярных форматов будут иметь некоторую поддержку во всех операционных системах, устанавливая больше программного обеспечения.
Мой личный выбор - 7-Zip, так как он имеет отличное и гибкое сжатие; несмотря на то, что он имеет своеобразный пользовательский интерфейс в Windows. Существуют декомпрессоры для Linux и Mac OS X (хотя они не основаны на графическом интерфейсе).
Одна вещь, которая приходит на ум, - это (двухлетнее) сообщение в блоге от Джеффа Этвуда: Сжатие файлов в эпоху многоядерности. В этой статье он обнаруживает, что bzip2 превосходит 7-zip, когда работает более двух ядер.
Как уже упоминали другие, выбор конкретного формата сжатия сильно зависит от использования и целевой аудитории.
Архивы.tar.gz и tar.bz2 идеально подходят для использования в системах Linux (и, соответственно, для обмена файлами с пользователями Linux), поскольку инструменты tar, gzip и bzip2 в основном распространены на платформе, а также потому, что формат.tar имеет полный поддержка разрешений Unix и других специфичных для платформы свойств. Выбор между gzip и bzip2 для сжатия архива tar - это, в основном, решение относительно скорости сжатия в сравнении с коэффициентом сжатия, поскольку bzip2 доставляет файлы меньшего размера, но с гораздо меньшей скоростью сжатия. Недостатки этих форматов включают в себя меньшую совместимость с Windows и (потенциальную) необходимость распаковывать весь архив для извлечения одного файла.
ZIP-архивы могут быть извлечены на большинстве платформ с использованием встроенных инструментов, поэтому это идеальный выбор для отправки архива нетехническому пользователю, который не хочет устанавливать стороннее программное обеспечение для архивирования, такое как 7-Zip. Уровень сжатия не так хорош, как более продвинутые алгоритмы, и он не поддерживает разрешения Unix, но это отличный формат, если вы хотите, например, отправить архив фотографий с праздников своей бабушке. ZIP также обеспечивает базовую защиту паролем и может быстро извлечь файл из любого места в архиве.
7-Zip хорош, если вы хотите наилучшие из возможных коэффициентов сжатия. Как и ZIP, он не поддерживает права доступа к файлам Unix или права собственности, а также не устанавливается по умолчанию на большинстве платформ, что делает его немного более удобным в использовании, но может оказаться полезным в Windows, если важны коэффициенты сжатия. В полностью Linux-среде было бы лучше использовать инструменты сжатия 'xz' или 'lzma' вместе с tar, которые работают точно так же, как 'gzip' и 'bzip2', но используют более продвинутый алгоритм LZMA, такой как 7 -Zip.
Для вас первый вопрос, 7-Zip - это архиватор, который может использовать множество алгоритмов для сжатия и распаковки данных.
На ваш второй вопрос, просто убедитесь, что платформа поддерживает инструменты, которые поддерживают данный формат. Например, я бы не использовал RAR на Mac. Хотя его можно использовать и есть бесплатные утилиты, которые его поддерживают, им не хватает гораздо более богатого интерфейса, чем утилиты Windows, которые поддерживают RAR (по моему опыту).
В качестве примера я использую упомянутые форматы в следующих случаях:
- Текстовые файлы (особенно логи): bz2
- Коллекция файлов для распространения (например, исходный код): gz (tar.gz действительно).
- Ассорти из файлов: 7zip. Я могу сжать почти все очень эффективным способом. Кроссплатформенное, с открытым исходным кодом, стабильное, легкое шифрование файлов (заголовков и данных),... Можете ли вы попросить что-нибудь еще?:)
Я вообще избегаю RAR, и всякий раз, когда я получаю RAR-файл от кого-то, кого я знаю, я говорю ему / ей прекратить использование этого формата, поскольку он является пропиарным, и что он, вероятно, использует нелицензионное программное обеспечение (большинство людей загружают пробную версию WinRAR и продолжают использовать это навсегда).
PS: я использую Ubuntu (в основном) и Windows (как с двойной загрузкой, так и с VirtualBox).
Существует как минимум четыре отдельных задания, которые часто путают друг с другом, потому что популярные инструменты интегрируют их:
- Архивирование: возможность объединять несколько файлов (включая метаданные) в один файл, сохраняя как можно больше вещей. В мире Linux/Unix архивирование традиционно выполняется в формате файлов TAR.
- Сжатие: способность без потерь минимизировать размер потока двоичных данных. В мире Linux/Unix это традиционно делают GZip и BZip2.
- Шифрование: возможность шифрования данных ключами
- Контрольная сумма: способность обнаруживать (и, возможно, исправлять) ошибки.
Повсеместное распространение.tar.gz и.tar.bz соответствует философии Unix, заключающейся в том, что небольшие инструменты хорошо выполняют одну работу, а не один инструмент, который делает все. Формат файла TAR не поддерживает сжатие или шифрование, но он может быть сжат любым другим компрессором (включая.tar.zip или.tar.7z). Работа GZip и BZip2 заключается в простом сжатии файлового потока в другой файловый поток. Слой сжатия не должен заботиться о том, как сохранить метаданные, шифрование или контрольную сумму. Со временем, хотя несколько ярлыков были сделаны в tar
Программа для работы с компрессором удобнее.
В формате файлов zip и 7z эти отдельные задания выполняются одной программой в одном формате суперфайлов.
Почему вышеприведенная тенденция сохраняется, хотя все это портативные форматы? Есть ли какие-то конкретные преимущества использования определенного формата архива на конкретной платформе?
Так как это было сделано, исходные коды программ традиционно распространяются как.tar.gz или.tar.bz2, потому что сохранение прав доступа к файлу, времени модификации и т. Д. Важно для различных инструментов, используемых для программирования (например, make).
Отдельный этап архивирования и сжатия работал очень хорошо в течение многих лет, он имеет явное преимущество, заключающееся в возможности свободно смешивать и сопоставлять архив и сжатие, а его недостаток (двухэтапный процесс сжатия) можно легко обойти, разработав более интеллектуальные инструменты (большинство современных программ сжатия linux напрямую сжимают в.tar.gz или.tar.bz2, скрывая промежуточный шаг).
Нет веских причин для перехода на другие форматы файлов, более новые компрессоры не имеют значительно лучшей степени сжатия, чтобы оправдать нарушение традиции, и tar может сохранить все достаточно хорошо.