Як я можу оцінити найкращий вибір формату архіву для стиснення файлів?


24

Загалом я спостерігав таке:

  • Файли або інструменти Linux-y використовують bzip2 або gzip для розповсюдження архівів
  • Файли або інструменти Windows-y використовують ZIP для розповсюдження архівів
  • Багато людей використовують 7-Zip для створення та розповсюдження власних архівів

Запитання:

  • Які переваги та недоліки цих форматів, які всі, здається, є відкритими форматами? Коли / чому я повинен вибрати один (скажімо, 7-Zip) над іншим (скажімо, ZIP)?
  • Чому, здається, що тенденція вище тримається, хоча всі ці портативні формати? Чи є якісь переваги щодо використання певного формату архіву на певній платформі?


1

@Sathya, @Andreas: Дякую за посилання, які є корисними і відповідають на частини мого питання. :)
Мехрдад

1
Стиснення - досить складне поле, і жоден алгоритм не може дати оптимальних результатів для всього - крім того, це проблема, на яку можна кидати ресурси та отримувати кращі результати, а також та, яка може бути виконана майже так само за набагато менше часу. Деякі алгоритми зосереджуються на швидкості та світлі пам’яті, деякі зосереджуються на створенні найменшого можливого файлу незалежно від того, скільки часу займає або для цього вам потрібна 12 Гб оперативної пам’яті (не перебільшуючи) тощо.
Phoshi

1
@Phoshi, це має бути відповіддю.
Іцчак

Відповіді:


16

Існує велика кількість форматів та методів стиснення, деякі взагалі не стискаються і призначені для зберігання декількох файлів в одному архіві, а інші новіші експериментальні компресори ( на основі PAQ ) призначені для максимально агресивного стиснення, незалежно від часу, необхідного для виконання зазначеної операції.

Вам потрібно оцінити функції, необхідні для вибору методу стиснення, а також врахувати контекст, в якому він буде використовуватися.

До різних особливостей і міркувань належать:

  • Здатність до стиснення - чи зменшує файл достатньо суттєво?
  • Зручність у використанні - якщо файл буде передано іншому користувачеві, чи буде архів легко витягнути, чи буде потрібно встановити більше програмного забезпечення?
  • Захист паролем та / або шифрування - Чи необхідні ці заходи безпеки?
  • Підтримка декількох томів - Якщо цільовий носій вимагає розбиття файлу на відповідні фрагменти, чи підтримує формат це елегантно. Наприклад, 650 Мб на компакт-диск.
  • Ремонт та відновлення - Якщо файл частково пошкоджений, чи пропонує він файл відновлення для відновлення даних?
  • Підтримка Unicode - Чи підтримує архіватор міжнародні імена файлів або просто стандартний ASCII?
  • Системні вимоги - сучасні компресори, такі як 7-Zip , пропонують можливість підвищити ефективність стиснення за допомогою більшого словника (словник - це посилання на часто повторювані дані в стисненому файлі), але це, в свою чергу, збільшує споживання пам'яті як при стисненні, так і час декомпресії
  • Підтримка самостійного вилучення - Чи може архів бути скомпонований у виконуваний файл, який забезпечує простоту використання тим, хто потребує його використання? (Також майте на увазі, що ви можете створити саморозпаковувач для однієї платформи. Взагалі, саморозпарювач Windows не працюватиме в Linux за замовчуванням, якщо тільки не працюватиме через шар сумісності, як Wine).
  • Атрибути файлової системи - Чи зберігає компресор відповідні метадані файлової системи та дозволи, які, можливо, варто зберегти в точці вилучення?

Взагалі ZIP - це найбільш повсюдний формат, але розміри понад 4 Гб загалом не підтримуються (якщо взагалі є), підтримка безпеки, як правило, вважається поганою (стандартний пароль може бути порушений звичайною текстовою атакою, і подальше шифрування - це як правило, реалізується як неофіційна похідна від формату комерційними постачальниками програмного забезпечення ZIP).

Крім цього, більшість інших популярних форматів матимуть певну підтримку у всіх операційних системах, встановлюючи більше програмного забезпечення.

Мій особистий вибір - 7-Zip , оскільки він має велику і гнучку компресію; незважаючи на те, що він має своєрідний інтерфейс користувача у Windows. Існують декомпресори для Linux та Mac OS X (хоча не стандартний графічний інтерфейс).


3
Якщо архів призначений для розповсюдження, також важливо врахувати вашу цільову аудиторію та використовувати формат, який підтримується за замовчуванням на їх платформі. Доступність може бути важливішою, ніж інші міркування в цьому випадку.
хаммар

+1 дякую за інформацію, хоча було б ще краще згадати, які формати підтримують ці пункти. :)
Мехрдад

Мене спокусило, але є безліч форматів, які потрібно було б перерахувати довго. У Вікіпедії є хороша матриця форматів стиснення форматів, що може допомогти: en.wikipedia.org/wiki/Comppare_of_archive_formats
Ruairi Fullam

1
Історія вчить важливого уроку, коли мова йде про саморозпаковування архівних файлів. З двох десятиліть тому існують архіви, що саморозпаковуються, що люди вже не можуть самостійно витягуватись через те, що їх машини не можуть запускати програми MS / PC-DOS або через те, що програми саморозпаковування виходять з ладу внаслідок зміни процесора, або через те, що екстрактори скаржаться, що диски повні, коли їх немає, оскільки вони не очікують, що диски будуть такими великими, або…
JdeBP

Цей момент, безумовно, є дискусійним, я не стикався з цією конкретною проблемою, але бачу, що вона виникає; Я припускаю, що це все питання кінцевої мети створення архіву та очікуваної довговічності використання файлів. Звичайно, якщо у вас є старий архів, який важко дістати з епохи DOS, ви можете використовувати DOSBox або навіть створити VM, якщо це потрібно.
Ruairi Fullam

8

Одне, що спадає на думку, - це (дворічна) публікація в блозі від Джеффа Етвуда: Стиснення файлів у багатоядерну епоху . У цій статті він виявляє, що bzip2 перевершує 7-zip, коли працює більше двох ядер.


+1 omg! Я цього не знав. Схоже, коефіцієнт стиснення цього не вартий. :)
Мехрдад

2
Цій посаді більше 2 років. Чи не працює 7-блискавка краще з двома ядрами зараз?
cregox

BZIP2 стискає ефективніше над декількома ядрами, оскільки він стискається в блоки 100-900 КБ, таким чином, може поширювати блоки на окремі ядра, але ефективність стиснення втрачається, оскільки ці блоки вважаються відмінними один від одного.
Ruairi Fullam

4

До першого питання, 7-Zip - це архіватор, ніж може використовувати багато алгоритмів для компресії та декомпресії даних.

До вашого другого питання просто переконайтеся, що платформа підтримує інструменти, що підтримують заданий формат. Наприклад, я б уникав використання RAR на Mac. Хоча це можливо використовувати, і є безкоштовні утиліти, які його підтримують, їм не вистачає значно багатшого інтерфейсу, який мають утиліти Windows, що підтримують RAR (на мій досвід).


Тоді як я особисто ненавиджу графічні програми rar і ​​завжди використовую командний рядок, навіть у Windows.
CarlF

4

Як зазначали інші, вибір конкретного формату стиснення сильно залежить від використання та призначеної аудиторії.

  • .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 -Зіп.


2

Як приклад, я використовую згадані формати в цих випадках:

  • Текстові файли (особливо журнали): bz2
  • Колекція файлів для розповсюдження (наприклад, вихідний код): gz (дійсно tar.gz).
  • Асорті файлів: 7zip. Я можу стиснути майже що завгодно дуже ефективний спосіб. Міжплатформна, відкрита, стабільна, легка, шифрування файлів (заголовок та дані), ... Чи можете ви попросити ще щось? :)

Я взагалі уникаю RAR , і коли я отримую файл RAR від когось, кого я знаю, я кажу йому / їй припинити використання цього формату, оскільки він є пропітерським, і він, ймовірно, використовує неліцензійне програмне забезпечення (більшість людей завантажують пробну версію WinRAR і продовжують використовувати це назавжди).

PS: Я запускаю Ubuntu (в першу чергу) і Windows (і подвійне завантаження, і VirtualBox).


1

Є щонайменше чотири окремі завдання, які часто плутають разом, оскільки популярні інструменти інтегрують їх:

  1. Архівування: можливість комбінувати декілька файлів (включаючи метадані) в один файл, зберігаючи якомога більше речей. У світі Linux / Unix архівування традиційно проводиться у форматі файлів TAR.
  2. Стиснення: можливість без втрат мінімізувати розмір потоку бінарних даних. У світі Linux / Unix це традиційно роблять GZip та BZip2.
  3. Шифрування: можливість кодування даних за допомогою клавіш
  4. Контрольна сума: можливість виявлення (і, можливо, виправлення) помилок.

Повсюдність .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, приховуючи проміжний крок).

Немає вагомих причин переходити до інших форматів файлів, новіші компресори не мають значно кращого коефіцієнта стиснення, щоб виправдати порушення традиції, а смола може зберегти все досить добре.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.