Pagina principala » HOWTO » 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?

    Fiind capabil să comprimați fișierele noastre astfel încât să le împărtășim mai ușor și / sau să le transportăm, putem face mult mai ușor viața 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 web Q & A.

    Foto prin amabilitatea lui Jean-Etienne Minh-Duy Poirrier (Flickr).

    Intrebarea

    Cititorul SuperUser sixtyfootersdude vrea să știe de ce zipul este capabil să comprime fișierele unice mai bine decât fișierele multiple 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 am 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 capabil să comprimați fișierele singulare mai bine decât fișierele multiple cu același tip de conținut?

    Răspunsul

    Utilizatorii 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 utilizate 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 tot conținutul.

    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 că este utilizată mai întâi gudronul, 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 ""Iar compresorul a găsit deja șirul într-un alt fișier, îl va înlocui cu un indicator mic la meciul anterior. Dacă compresorul nu utilizează compresia 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 comentariile. Doriți să citiți mai multe răspunsuri de la alți utilizatori de tehnologie Stack Exchange? Check out discuția completă aici.