Αρχική σελίδα » πως να » Γιατί είναι το Zip ικανό να συμπιέζει ενιαία αρχεία καλύτερα από πολλά αρχεία με το ίδιο περιεχόμενο;

    Γιατί είναι το Zip ικανό να συμπιέζει ενιαία αρχεία καλύτερα από πολλά αρχεία με το ίδιο περιεχόμενο;

    Η δυνατότητα συμπίεσης των αρχείων μας, ώστε να είναι ευκολότερη η κοινή χρήση ή / και η μεταφορά τους, μπορεί να καταστήσει πολύ πιο εύκολη την ηλεκτρονική μας ζωή, αλλά μερικές φορές μπορεί να δούμε παράξενα ή μη αναμενόμενα αποτελέσματα μεγέθυνσης αφού τα συμπιέσουμε. Γιατί αυτό? Η σημερινή θέση Q & A της SuperUser έχει τις απαντήσεις σε ερωτήσεις που προκαλεί σύγχυση στον αναγνώστη.

    Η σημερινή συνάντηση ερωτήσεων και απαντήσεων έρχεται σε επαφή με το SuperUser - μια υποδιαίρεση του Stack Exchange, μια κοινότητα που κατευθύνεται από τους ιστότοπους ερωτήσεων & απαντήσεων.

    Φωτογραφία ευγενική προσφορά του Jean-Etienne Minh-Duy Poirrier (Flickr).

    Το ερώτημα

    Ο αναγνώστης SuperUser sixtyfootersdude θέλει να μάθει γιατί το zip είναι σε θέση να συμπιέζει μεμονωμένα αρχεία καλύτερα από πολλά αρχεία με τον ίδιο τύπο περιεχομένου:

    Υποθέστε ότι έχω 10.000 αρχεία XML και θέλετε να τα στείλετε σε έναν φίλο. Πριν τα στείλω, θα ήθελα να τα συμπιέσω.

    Μέθοδος 1: Μη τους συμπιέζετε

    Αποτελέσματα:

    Μέθοδος 2: Κάθε αρχείο χωρίστε χωριστά και στείλτε του 10.000 αρχεία XML με συμπιεσμένα αρχεία

    Εντολή:

    Αποτελέσματα:

    Μέθοδος 3: Δημιουργήστε ένα ενιαίο αρχείο Zip που περιέχει όλα τα 10.000 αρχεία XML

    Εντολή:

    Αποτελέσματα:

    Μέθοδος 4: Συνένωση των αρχείων σε ένα ενιαίο αρχείο και συμπίεση

    Εντολή:

    Αποτελέσματα:

    Ερωτήσεις

    • Γιατί παίρνω τέτοια δραματικά καλύτερα αποτελέσματα όταν απλά φτιάχνω ένα μόνο αρχείο?
    • Αναμέναμε να πάρουμε δραστικά καλύτερα αποτελέσματα χρησιμοποιώντας τη μέθοδο 3 παρά τη μέθοδο 2, αλλά δεν το κάνω. Γιατί είναι αυτό?
    • Αυτή η συμπεριφορά είναι συγκεκριμένη στο φερμουάρ; Αν προσπαθώ να χρησιμοποιήσω το Gzip, θα έχω διαφορετικά αποτελέσματα?

    Πρόσθετες πληροφορίες

    Μέτα δεδομένα

    Μια από τις απαντήσεις που δίνονται υποδηλώνει ότι η διαφορά είναι τα μεταδεδομένα του συστήματος που είναι αποθηκευμένα στο αρχείο zip. Δεν πιστεύω ότι αυτό μπορεί να συμβεί. Για να το δοκιμάσω, έκανα τα εξής:

    Το προκύπτον αρχείο zip είναι 1,4 MB. Αυτό σημαίνει ότι εξακολουθούν να υπάρχουν περίπου δέκα MB ανεξήγητου χώρου.

    Γιατί το zip μπορεί να συμπιέσει μεμονωμένα αρχεία καλύτερα από πολλά αρχεία με τον ίδιο τύπο περιεχομένου?

    Η απάντηση

    Οι συνεργάτες του SuperUser Alan Shutko και Aganju έχουν την απάντηση για εμάς. Πρώτα, ο Άλαν Σούνκο:

    Η συμπίεση Zip βασίζεται σε επαναλαμβανόμενα μοτίβα στα δεδομένα που πρόκειται να συμπιεστούν και η συμπίεση γίνεται όλο και μεγαλύτερη όσο είναι το αρχείο, καθώς μπορούν να βρεθούν και να χρησιμοποιηθούν περισσότερα και περισσότερα μοτίβα.

    Απλοποιημένο, εάν συμπιέζετε ένα αρχείο, το λεξικό που χαρτογραφεί (σύντομα) κώδικες σε (μακρύτερα) μοτίβα περιλαμβάνεται αναγκαστικά σε κάθε αρχείο zip που προκύπτει. αν φέρετε ένα μεγάλο αρχείο, το λεξικό «επαναχρησιμοποιείται» και αυξάνεται ακόμη περισσότερο αποτελεσματικά σε όλο το περιεχόμενο.

    Εάν τα αρχεία σας είναι ακόμη λίγο παρόμοια (όπως είναι πάντα το κείμενο), η επαναχρησιμοποίηση του λεξικού γίνεται πολύ αποδοτική και το αποτέλεσμα είναι ένα πολύ μικρότερο σύνολο αρχείων zip.

    Ακολουθούμενη από την απάντηση του Aganju:

    Στο zip, κάθε αρχείο συμπιέζεται χωριστά. Το αντίθετο είναι συμπαγής συμπίεση, δηλαδή, τα αρχεία συμπιέζονται μεταξύ τους. 7-zip και Rar χρησιμοποιούν σταθερή συμπίεση από προεπιλογή. Το Gzip και το Bzip2 δεν μπορούν να συμπιέσουν πολλά αρχεία, οπότε το Tar χρησιμοποιείται πρώτα, έχοντας το ίδιο αποτέλεσμα με την συμπαγή συμπίεση.

    Δεδομένου ότι τα αρχεία xml έχουν παρόμοια δομή (και πιθανώς παρόμοιο περιεχόμενο), εάν τα αρχεία συμπιέζονται μαζί τότε η συμπίεση θα είναι υψηλότερη.

    Για παράδειγμα, εάν ένα αρχείο περιέχει τη συμβολοσειρά ""Και ο συμπιεστής έχει ήδη βρει αυτή τη συμβολοσειρά σε άλλο αρχείο, θα το αντικαταστήσει με ένα μικρό δείκτη στον προηγούμενο αγώνα. Εάν ο συμπιεστής δεν χρησιμοποιεί σταθερή συμπίεση, η πρώτη εμφάνιση της συμβολοσειράς στο αρχείο θα καταγραφεί ως a κατά γράμμα, που είναι μεγαλύτερο.


    Έχετε κάτι να προσθέσετε στην εξήγηση; Απενεργοποιήστε τα σχόλια. Θέλετε να διαβάσετε περισσότερες απαντήσεις από άλλους τεχνολογικούς χρήστες Stack Exchange; Δείτε το πλήρες νήμα συζήτησης εδώ.