If-Koubou

De ce este Zip capabil să comprime fișiere unice mai bune decât mai multe fișiere cu același conținut?

De ce este Zip capabil să comprime fișiere unice mai bune decât mai multe fișiere cu același conținut? (Cum să)

Fiind capabil să ne comprimăm fișierele, astfel încât să le putem împărtăși mai ușor și / sau să le transportăm, putem face mult mai ușor viața noastră electronică, dar uneori este posibil să vedem rezultate de comparare ciudate sau neașteptate după ce le comprimăm. De ce este asta? Postul de astăzi SuperUser Q & A are răspunsurile la întrebările confuze ale cititorului.

Sesiunea de întrebări și răspunsuri din ziua de astăzi vine de la amabilitatea SuperUser - o subdiviziune a Stack Exchange, o grupare bazată pe comunitate a site-urilor Q & A.

Fotografia este asigurată de Jean-Etienne Minh-Duy Poirrier (Flickr).

Intrebarea

Cititorul SuperUser sixtyfootersdude dorește să știe de ce zip-ul este capabil să comprime fișierele individuale mai bine decât mai multe fișiere cu același tip de conținut:

Să presupunem că am 10 000 de fișiere XML și vreau să le trimit unui prieten. Înainte de a le trimite, aș vrea să le comprim.

Metoda 1: Nu le comprimați

Rezultate:

Metoda 2: Trimiteți fiecare fișier separat și trimiteți-i 10.000 de fișiere XML cu zip

Comanda:

Rezultate:

Metoda 3: Creați un singur fișier zip care conține toate fișierele XML de 10.000

Comanda:

Rezultate:

Metoda 4: concatenarea fișierelor într-un singur fișier și zip it

Comanda:

Rezultate:

Întrebări

  • De ce obțin rezultate atât de dramatic mai bune atunci când eu zip doar un singur fișier?
  • Mă așteptam să obțin rezultate drastice mai bune folosind metoda 3 decât metoda 2, dar nu o fac. De ce asta?
  • Este acest comportament specific zipului? Dacă am încercat să folosesc Gzip, aș obține rezultate diferite?

Informații suplimentare

Meta date

Unul dintre răspunsurile date sugerează că diferența este sistemul de date meta care este stocat în fișierul zip. Nu cred că acest lucru poate fi cazul. Pentru a le testa, am făcut următoarele:

Fișierul zip rezultat este de 1,4 MB. Aceasta înseamnă că încă mai există încă zece MB de spațiu inexplicabil.

De ce este zipul capabil să comprime fișierele singulare mai bine decât fișierele multiple cu același tip de conținut?

Răspunsul

Contribuitorii SuperUser Alan Shutko și Aganju au răspunsul pentru noi. În primul rând, Alan Shutko:

Compresia prin zip se bazează pe modele repetitive în datele care urmează a fi comprimate, iar compresia devine mai bună cu cât fișierul este mai lung, deoarece pot fi găsite și folosite modele mai lungi și mai lungi.

Simplificat, dacă comprimați un fișier, dicționarul care codifică (scurt) codurile la (mai lungi) modele este în mod necesar conținut în fiecare fișier zip rezultat; dacă zip un fișier lung, dicționarul este "reutilizat" și crește și mai eficient în întregul conținut.

Dacă fișierele dvs. sunt chiar un pic similare (așa cum este textul întotdeauna), reutilizarea dicționarului devine foarte eficientă și rezultatul este un fișier zip total mult mai mic.

Urmat de răspunsul de la Aganju:

În zip, fiecare fișier este comprimat separat. Opusul este compresie solidă, adică fișierele sunt comprimate împreună. 7-zip și Rar utilizează implicit compresia solidă. Gzip și Bzip2 nu pot comprima mai multe fișiere, astfel încât Tar este utilizat mai întâi, având același efect ca și compresia solidă.

Deoarece fișierele xml au o structură similară (și probabil un conținut similar), dacă fișierele sunt comprimate împreună, atunci compresia va fi mai mare.

De exemplu, dacă un fișier conține șirul ""Și compresorul a găsit deja șirul într-un alt fișier, îl va înlocui cu un indicator mic la meciul anterior. Dacă compresorul nu folosește compresie solidă, prima apariție a șirului din fișier va fi înregistrată ca a literal, care este mai mare.

Aveți ceva de adăugat la explicație? Sunați în comentarii. Doriți să citiți mai multe răspunsuri de la alți utilizatori de tehnologie Stack Exchange? Check out discuția completă aici.