Домашня » як » Чому Zip здатний стискати окремі файли краще, ніж кілька файлів з однаковим вмістом?

    Чому Zip здатний стискати окремі файли краще, ніж кілька файлів з однаковим вмістом?

    Можливість стискати наші файли так, щоб їх було легше обмінювати та / або транспортувати, може зробити наш електронний спосіб життя набагато простішим, але іноді ми можемо побачити незвичайні або несподівані результати калібрування після їх стиснення. Чому так? Сьогоднішня посада SuperUser Q&A має відповіді на запитання читача.

    Сьогоднішня сесія запитань та відповідей приходить до нас люб'язно SuperUser - підрозділ Stack Exchange, групування веб-сайтів із запитаннями та відповідями на рівні спільноти..

    Фото люб'язно надано Жан-Етьєном Мін-Дуй Пуаріе (Flickr).

    Питання

    Читач SuperUser sixtyfootersdude хоче знати, чому zip здатний стискати окремі файли краще, ніж кілька файлів з однаковим типом вмісту:

    Припустимо, що у мене 10 000 XML-файлів і я хочу відправити їх другові. Перш ніж відправити їх, я хотів би їх стиснути.

    Метод 1: Не стискайте їх

    Результати:

    Метод 2: окремо копіюйте всі файли та надсилайте йому 10000 файлів XML у форматі zip

    Команда:

    Результати:

    Метод 3: Створення єдиного файлу Zip, що містить всі 10000 файлів XML

    Команда:

    Результати:

    Метод 4: Об'єднуючи файли в єдиний файл і закріпіть його

    Команда:

    Результати:

    Питання

    • Чому я отримую такі значно кращі результати, коли я просто стискаю один файл?
    • Я очікував, що отримаю радикально кращі результати, використовуючи метод 3, а не метод 2, але я цього не роблю. Чому це?
    • Чи є така поведінка специфічною для zip? Якщо я спробував використовувати Gzip, я отримаю різні результати?

    Додаткова інформація

    Метадані

    Один з наведених відповідей свідчить про те, що різниця полягає в тому, що мета-дані системи зберігаються в zip-файлі. Я не вважаю, що це може бути так. Щоб перевірити його, я зробив наступне:

    Отриманий zip-файл становить 1,4 Мб. Це означає, що існує ще близько 10 Мб нез'ясованого простору.

    Чому zip здатний стискати окремі файли краще, ніж кілька файлів з однаковим типом вмісту?

    Відповідь

    Співробітники SuperUser Алан Шутко і Аганю мають відповідь для нас. Спочатку Алан Шутко:

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

    Спрощений, якщо ви стискаєте один файл, словник, який відображає (короткі) коди на (довші) шаблони, обов'язково міститься в кожному результуючому zip-файлі; якщо ви застібаєте один довгий файл, словник 'повторно' і зростає ще ефективніше в усьому вмісті.

    Якщо ваші файли навіть подібні (як завжди є текст), повторне використання "словника" стає дуже ефективним, і результат є набагато меншим загальним файлом zip.

    Далі йшла відповідь від Aganju:

    У zip кожен файл стискається окремо. Протилежне тверде стиснення, файли стискаються разом. 7-zip і Rar використовують тверде стиснення за замовчуванням. Gzip і Bzip2 не можуть стискати декілька файлів, тому спочатку використовується Tar, що має такий самий ефект, як тверде стиснення.

    Оскільки xml-файли мають подібну структуру (і, можливо, подібний вміст), якщо файли стискаються разом, то стиснення буде вище.

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


    Маєте щось додати до пояснення? Звучить в коментарях. Хочете прочитати більше відповідей від інших технологічних користувачів Stack Exchange? Перегляньте повний потік обговорення тут.