Question Pourquoi un fichier zip apparaît-il plus grand que le fichier source, en particulier lorsqu'il s'agit de texte?


J'ai un fichier texte d'une taille de 19 octets et ayant compressé le fichier en utilisant zip et 7zip, il semble être plus grand. J'ai eu une lecture de la question sur Pourquoi un fichier 7zipped est-il plus grand que le fichier brut? aussi bien que Pourquoi la compression ZIP ne compense-t-elle rien? mais vu que le fichier n'est pas déjà compressé, je m'attendrais à une compression supplémentaire. Ci-joint une capture d'écran.

enter image description here

EDIT0

J'ai pris l'exemple plus loin en créant un fichier contenant des données aléatoires comme suit dd if=/dev/urandom of=sample.log bs=1G count=1 et essayé de compresser le fichier en utilisant à la fois zip et 7zip mais il n'y avait pas de gains de compression. Pourquoi donc?

enter image description here


4
2017-08-29 06:39


origine


Et c'est un fichier journal de 1 Go en texte clair? - CyberSkull
@ CyberSkull - Oui c'est le cas. - PeanutsMonkey
Pouvez-vous nous dire quels étaient vos paramètres zip? J'aurais fait quelque chose comme zip -9T "example.zip" sample.log (-t est juste pour tester l'intégrité de l'archive.) - CyberSkull
Les données aléatoires de / dev / urandom font ne pas générer un vrai fichier texte; il ne compressera pas bien du tout. Les octets de texte ont une portée limitée, avec de nombreux espaces et des motifs répétés (par exemple "th" et "sp") et des mots. Vous avez en fait généré un fichier binaire aléatoire. - Ken
@CyberSkull: Non, vous avez un flux aléatoire de caractères ASCII. Ce qui est un peu plus compressible que le binaire aléatoire, mais toujours aussi structuré que le texte. - Ben Voigt


Réponses:


Comme @kinokijuf l'a dit, il existe un en-tête de fichier. Mais pour développer cela, il y a quelques autres choses à comprendre sur la compression de fichiers.

L'en-tête zip contient toutes les informations nécessaires pour identifier le type de fichier (le numéro magique), la version zip et enfin une liste de tous les fichiers inclus dans l'archive.

Votre fichier n'a probablement pas été compressé de toute façon. Si tu cours unzip -l example.zip vous verrez probablement que la taille du fichier est inchangée. 19 octets génèreraient probablement plus de surcharge que ce qui serait sauvegardé s'il était compressible par DEFLATE (la principale méthode de compression utilisée par zip).

Dans d’autres cas, les images PNG par exemple, elles sont déjà compressées, donc zip les stockera. DEFLATE ne gênera pas la compression de tout ce qui est déjà compressé.

Si, d’autre part, vous aviez beaucoup de fichiers texte, et que leur taille dépassait quelques kilo-octets chacun, vous obtiendriez de grosses économies en les mettant tous dans un unique archive zip

Vous obtiendrez de meilleures économies en compressant des données formatées très régulières, comme un fichier texte contenant un vidage SQL. Par exemple, j'ai déjà utilisé une petite base de données SQL à environ 13 Mo. Iran zip -9 dump.sql dump.zip sur elle et a fini avec environ 1 Mo après.

Un autre facteur est votre niveau de compression. Par défaut, de nombreux archiveurs ne seront compressés qu’à un niveau intermédiaire, ce qui réduira la vitesse. Lors de la compression avec zip, essayez le -9 flag for maximum compression (Je pense que le manuel 3.x indique que les niveaux de compression ne sont supportés que par DEFLATE pour le moment).

TL; DR

La surcharge pour l'archive a dépassé tous les gains obtenus pour la compression du fichier. Essayez de mettre des fichiers texte plus volumineux et voyez ce que vous obtenez. Utilisez le -v drapeau lors de la fermeture pour voir vos économies au fur et à mesure.


7
2017-08-29 07:08



Lorsque vous dites que la taille du fichier est inchangée si vous le décompressez, voulez-vous dire la taille de l'archive? Deuxièmement, si je devais utiliser une méthode de compression différente de DEFLATE telle que PPMD, cela ferait-il une différence? Alors quand vous dites le -V drapeau voulez-vous dire quand j'exécute le zip commander? - PeanutsMonkey
De même, lorsque vous parlez de type de fichier, vous voulez dire le type de fichier que la source est, par exemple texte, MP3, etc. - PeanutsMonkey


Parce que la surcharge des en-têtes .zip est façon plus grand que 19 octets.


4
2017-08-29 06:43



Comment cela affecte-t-il les fichiers texte plus gros? - PeanutsMonkey


La compression supprime les informations redondantes, qui apparaissent lorsque les données sont fortement structurées.

De ce fait, il est évident que les fichiers déjà compressés ne peuvent plus être compressés, car la redondance a déjà disparu, mais que les données aléatoires ne se compresseront pas correctement, car elles n’ont jamais de structure ou de redondance.

Il existe toute une science, la théorie de l’information, qui traite de la mesure de la densité des informations (et de l’information mutuelle) et utilise la redondance et la structure pour effectuer la compression, les attaques de chiffrement et la détection et la récupération des erreurs.


1
2018-05-28 19:27