Page d'accueil » comment » Pourquoi Zip peut-il compresser des fichiers uniques mieux que plusieurs fichiers ayant le même contenu?

    Pourquoi Zip peut-il compresser des fichiers uniques mieux que plusieurs fichiers ayant le même contenu?

    Le fait de pouvoir compresser nos fichiers afin de faciliter leur partage et / ou leur transport peut faciliter notre vie électronique, mais nous pouvons parfois constater des résultats de dimensionnement étranges ou inattendus après leur compression. Pourquoi donc? Le post de SuperUser d'aujourd'hui contient les réponses aux questions d'un lecteur confus.

    La séance de questions et réponses d'aujourd'hui nous est offerte par SuperUser, une sous-division de Stack Exchange, un groupe de sites Web de questions-réponses dirigé par la communauté..

    Photo fournie par Jean-Etienne Minh-Duy Poirrier (Flickr).

    La question

    Le lecteur superutilisateur Sixtyfootersdude veut savoir pourquoi zip est capable de compresser des fichiers uniques mieux que plusieurs fichiers avec le même type de contenu:

    Supposons que je dispose de 10 000 fichiers XML et que je souhaite les envoyer à un ami. Avant de les envoyer, je voudrais les compresser.

    Méthode 1: ne les compressez pas

    Résultats:

    Méthode 2: décompressez chaque fichier séparément et envoyez-lui 10 000 fichiers XML compressés

    Commander:

    Résultats:

    Méthode 3: Créer un fichier Zip unique contenant tous les 10 000 fichiers XML

    Commander:

    Résultats:

    Méthode 4: concaténer les fichiers dans un fichier unique et les compresser

    Commander:

    Résultats:

    Des questions

    • Pourquoi ai-je des résultats aussi spectaculaires alors que je ne fais que compresser un fichier?
    • Je m'attendais à obtenir des résultats nettement meilleurs en utilisant la méthode 3 plutôt que la méthode 2, mais ce n'est pas le cas. Pourquoi est-ce?
    • Ce comportement est-il spécifique à zip? Si j'essayais d'utiliser Gzip, aurais-je des résultats différents??

    Information additionnelle

    Métadonnées

    Une des réponses suggérées suggère que la différence réside dans les métadonnées système stockées dans le fichier zip. Je ne crois pas que cela puisse être le cas. Pour le tester, j'ai fait ce qui suit:

    Le fichier zip résultant est de 1,4 Mo. Cela signifie qu’il reste environ dix Mo d’espace non expliqué..

    Pourquoi zip est-il capable de compresser des fichiers uniques mieux que plusieurs fichiers avec le même type de contenu?

    La réponse

    Les contributeurs du super-utilisateur, Alan Shutko et Aganju, ont la solution pour nous D'abord, Alan Shutko:

    La compression Zip est basée sur des modèles répétitifs dans les données à compresser, et la compression s'améliore à mesure que le fichier est long, car des modèles plus nombreux et plus longs peuvent être trouvés et utilisés..

    Simplifié, si vous compressez un fichier, le dictionnaire qui associe des codes (courts) à des modèles (plus longs) est nécessairement contenu dans chaque fichier zip résultant. si vous zippez un long fichier, le dictionnaire est 'réutilisé' et gagne en efficacité sur tous les contenus.

    Si vos fichiers sont même un peu similaires (le texte l'est toujours), la réutilisation du 'dictionnaire' devient très efficace et le résultat est un fichier zip beaucoup plus petit..

    Suivi de la réponse d'Aganju:

    En zip, chaque fichier est compressé séparément. Le contraire est compression solide, c'est-à-dire que les fichiers sont compressés ensemble. 7-zip et Rar utilisent la compression solide par défaut. Gzip et Bzip2 ne peuvent pas compresser plusieurs fichiers, donc Tar est utilisé en premier, ayant le même effet qu'une compression solide..

    Comme les fichiers XML ont une structure similaire (et probablement un contenu similaire), si les fichiers sont compressés ensemble, la compression sera plus élevée..

    Par exemple, si un fichier contient la chaîne “”Et le compresseur a déjà trouvé cette chaîne dans un autre fichier, il la remplacera par un petit pointeur sur la correspondance précédente. Si le compresseur n'utilise pas la compression solide, la première occurrence de la chaîne dans le fichier sera enregistrée en tant que littéral, qui est plus grand.


    Avez-vous quelque chose à ajouter à l'explication? Sound off dans les commentaires. Voulez-vous lire plus de réponses d'autres utilisateurs de Stack Exchange doués en technologie? Découvrez le fil de discussion complet ici.