Чому існують бінарні відмінності між стислими файлами, які генеруються точно так само, як і з того ж самого початкового файлу?


4

Я використовую команду "diff" для порівняння двох стислих файлів, створених за допомогою zip, на той самий початковий файл, і вони повідомляються як різні. Однак, коли я розпаковую їх і використовую команду "diff", ніяких відмінностей не буде показано. Я помітив це як з zip, так і з gzip.

Відповіді:


2

Ви також можете використовувати zdiff, якщо ви хочете порівняти стислий вміст.


13

Одне з полів у Заголовок gzip відрізняється від двох файлів. Одне з таких полів - це останнє змінене час стисненого файлу (у секундах з 1970 року), або якщо стислі дані не були прочитані з файлу, то час, коли файл був стиснутий.

Навіть одна секундна різниця достатньо, щоб файли gzip не збігалися.


@ChristopherBottoms Ця стаття досліджує те ж саме явище: medium.com/@mpreziuso/…
XCore

2

Дві можливі причини:

  • відрізняється алгоритмом стиснення, використовуваним тією ж програмою стиснення, або
  • різні програми стиснення

2
Я не думав додавати, що специфікація файлу PKZip, наприклад, включає області даних, зарезервовані для коментарів. Можливо, gzip (і т.д.) може розміщувати дані в місцях коментарів, які включають такі значення, як Дата і Час, що призведе до появи двійкових відмінностей. Вони не впливатимуть на дані, які стискаються, лише на остаточний стислий архів.
JMD

Дякую. Я не думав згадувати, що вони були створені тією ж програмою з тими ж параметрами командного рядка. Я не змінював жодних параметрів під час стиснення двох файлів. +1, коли я можу.
Christopher Bottoms

2

Можна використовувати опцію gzip --no-name (або -n ), щоб зупинити gzip від додавання імені вихідного файлу та часу до заголовка gzip. Це повинно запобігати невідповідності, коли дані однакові, за умови, що використовується однаковий рівень стиснення. Один із способів додати цю опцію до команд gzip - це встановити значення GZIP змінної середовища, так що цей параметр використовується кожною командою gzip. Наприклад, у сумісній з Bourne оболонці, наприклад bash,

export GZIP="--no-name -6"

або

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