15 votes

zip dégonflé 0% ? Pourquoi pas de compression ?

J'essaie de zipper le contenu d'un dossier qui contient 4 gros fichiers, très, très similaires. Je m'attends donc à ce que la taille soit réduite.

Voici la commande que j'utilise sur linux/fedora :

zip -9 myarchive.zip -r myfolder -P mypassword

On me répond :

adding: myfolder/ (stored 0%)
adding: myfolder/Program1.exe (deflated 0%)
adding: myfolder/Program2.exe (deflated 0%)
adding: myfolder/Program3.exe (deflated 0%)
adding: myfolder/Program4.exe (deflated 0%)

Ensuite, j'obtiens l'archive, qui a approximativement la même taille que mon dossier d'origine.

Il semble qu'il n'y ait aucune compression. Pourquoi ?

20voto

Aaron Digulla Points 143830

Contrairement à tar + gzip , zip utilise une nouvelle table de compression pour chaque fichier, de sorte que même si les quatre fichiers étaient identiques, il essaierait de les compresser individuellement.

Techniquement, tar voit également chaque fichier, mais il les enchaîne en une seule entrée longue pour les gzip L'étape de compression s'effectue donc sur une seule grande entrée, ce qui explique pourquoi tar + gzip donne généralement un résultat plus faible que zip .

La question est de savoir pourquoi votre exe ne peuvent pas être compressés. exe contiennent généralement de grandes quantités de données facilement compressibles, de sorte qu'ils devraient être réduits ("dégonflés") d'au moins 30 %. Les fichiers sont peut-être cryptés ou obscurcis ; ces processus rendent le résultat difficile à compresser.

5voto

Mark Adler Points 15178

Dégonflé 0% signifie qu'il a essayé de se compresser, mais qu'il n'a obtenu aucune compression. Comme indiqué, le format zip ne peut pas tirer parti des similitudes entre différentes entrées. tar + gzip le peuvent, mais seulement si les similitudes se retrouvent à moins de 32K octets l'une de l'autre. D'autres formats peuvent exploiter les similitudes à plus longue distance, comme xz.

Il est normal que les exécutables non compressés soient compressés de 30 à 50 %, ce qui signifie que vos exécutables sont soit a) compressés par quelque chose comme UPX Les données compressées ne sont pas des données compressées, mais des données compressées auto-extractibles, où le décompresseur est stocké avant les données compressées, c) il s'agit d'exécutables très courts contenant beaucoup de données compressées, ou d) elles sont pour la plupart cryptées.

3voto

James Points 31

Aaron a raison. D'après Wikipedia , le ZIP compresse avant d'archiver, de sorte que les similitudes entre différents fichiers ne facilitent pas la compression.

Essayez-vous vraiment de compresser .exe fichiers ? Je doute que ce soit le type de fichier que vous utilisez.

Voir http://en.wikipedia.org/wiki/ZIP_(format_de_fichier)#Avantages_et_inconvénients .

2voto

Basile Starynkevitch Points 67055

Certains fichiers ne peuvent pas être compressés, en particulier si leur entropie est élevée. C'est le cas lorsque la distribution statistique des octets est uniforme (par exemple, lorsque l'octet 0 apparaît aussi souvent que l'octet 1 ou l'octet 2...). C'est le cas des contenus déjà compressés. Certains formats vidéo ou audio entrent dans cette catégorie.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X