Αναγνώστες σαν εσάς βοηθούν στην υποστήριξη του MUO. Όταν κάνετε μια αγορά χρησιμοποιώντας συνδέσμους στον ιστότοπό μας, ενδέχεται να κερδίσουμε μια προμήθεια θυγατρικών. Διαβάστε περισσότερα.

Οι αλγόριθμοι Gzip και Zlib χρησιμοποιούνται ευρέως για τη συμπίεση και την αποσυμπίεση αρχείων. Το Gzip χρησιμοποιείται κυρίως για τη συμπίεση μεμονωμένων αρχείων, ενώ το Zlib συμπιέζει κυρίως ροές δεδομένων. Οι αλγόριθμοι χρησιμοποιούν τον αλγόριθμο συμπίεσης Deflate για συμπίεση, αν και το Gzip παρέχει πρόσθετες δυνατότητες, όπως έλεγχος σφαλμάτων και μεταδεδομένων αρχείων.

Το Gzip έχει προσφέρει καλύτερες αναλογίες συμπίεσης από το Zlib. Ωστόσο, το Gzip απαιτεί περισσότερη επεξεργαστική ισχύ για τη συμπίεση και την αποσυμπίεση δεδομένων. Στις περισσότερες περιπτώσεις, θα πρέπει να χρησιμοποιείτε το Gzip για τη συμπίεση αρχείων και το Zlib για τη συμπίεση ροών δεδομένων.

Το Go παρέχει τη λειτουργικότητα για τη συμπίεση δεδομένων, συμπεριλαμβανομένων των αρχείων μέσω του συμπιέζω πακέτο.

Το πακέτο συμπίεσης

instagram viewer

ο συμπιέζω Το πακέτο υποστηρίζει τη συμπίεση δεδομένων μέσω του συμπίεση/gzip και συμπίεση/zlib πακέτα, μεταξύ άλλων λειτουργιών.

ο gzip Το πακέτο υποστηρίζει τη συμπίεση και την αποσυμπίεση των δεδομένων μορφής αρχείου gzip, συμπεριλαμβανομένων των λειτουργιών ανάγνωσης και εγγραφής όπως καθορίζεται στο RFC 1952. Ενώ το zlib Το πακέτο βοηθά στη συμπίεση και την αποσυμπίεση δεδομένων σε μορφή zlib.

Μπορείτε να εισάγετε gzip και zlib από το συμπιέζω συσκευασία χρησιμοποιώντας το εισαγωγή λέξη-κλειδί.

εισαγωγή (
"συμπίεση/gzip"// εισαγωγή gzip

"συμπίεση/zlib"// εισαγωγή zlib
)

Συμπίεση και αποσυμπίεση αρχείων με Gzip

Το Gzip είναι μια μορφή αρχείου και μια εφαρμογή λογισμικού για συμπίεση και αποσυμπίεση αρχείων. Το Gzip χρησιμοποιεί τον αλγόριθμο αλυσίδας Lempel-Ziv-Markov (LZ77) για τη συμπίεση δεδομένων και ο αλγόριθμος χρησιμοποιείται συχνά για τη συμπίεση αρχείων κειμένου, όπως αρχεία HTML, CSS ή JavaScript.

Η διαδικασία συμπίεσης αρχείων με το gzip Το πακέτο είναι απλό και διαισθητικό. Θα χρειαστεί να ανοίξετε το αρχείο, να δημιουργήσετε ένα αρχείο gzip, να δημιουργήσετε ένα πρόγραμμα εγγραφής gzip και να αντιγράψετε το πρωτότυπο τα περιεχόμενα του αρχείου στο πρόγραμμα εγγραφής gzip πριν από τη λειτουργία flush που διασφαλίζει ότι η διαδικασία εγγραφής είναι πλήρης.

Εκτελέστε αυτό εντολή bash στο τερματικό του καταλόγου εργασίας σας σε συστήματα Unix για να δημιουργήσετε ένα δείγμα αρχείου κειμένου και στη συνέχεια να εισαγάγετε κείμενο στο αρχείο.

// δημιουργεί ένα αρχείο κειμένου.
αγγίξτε παράδειγμα.txt

// διοχετεύει τη συμβολοσειρά στο αρχείο
echo 'Γεια, κόσμο!' > example.txt}

Μετά τη δημιουργία του αρχείου και την εισαγωγή του κειμένου, μπορείτε να εισαγάγετε το gzip, io, και os πακέτα για τη λειτουργία συμπίεσης.

Εδώ είναι πώς μπορείτε να χρησιμοποιήσετε το συμπίεση/gzip πακέτο για τη συμπίεση ενός αρχείου κειμένου.

εισαγωγή (
"συμπίεση/gzip"
"io"
"os"
)

funcκύριος() {
// Ανοίξτε το αρχικό αρχείο
originalFile, err := os. Ανοιξε("example.txt")
αν λάθος!= μηδέν {
πανικός(πλανώμαι)
}
αναβάλλω αρχικό αρχείο. Κλείσε()

// Δημιουργία νέου αρχείου gzip
gzippedFile, err := os. Δημιουργώ("example.txt.gz")
αν λάθος!= μηδέν {
πανικός(πλανώμαι)
}
αναβάλλω gzippedFile. Κλείσε()

// Δημιουργία νέου προγράμματος εγγραφής gzip
gzipWriter := gzip. NewWriter (gzippedFile)
αναβάλλω gzipWriter. Κλείσε()

// Αντιγράψτε τα περιεχόμενα του αρχικού αρχείου στο πρόγραμμα εγγραφής gzip
_, err = io. Αντιγραφή (gzipWriter, originalFile)
αν λάθος!= μηδέν {
πανικός(πλανώμαι)
}

// Ξεπλύνετε το πρόγραμμα εγγραφής gzip για να βεβαιωθείτε ότι έχουν εγγραφεί όλα τα δεδομένα
gzipWriter. Ξεπλύνετε()
}

ο Ανοιξε λειτουργία του os πακέτο ανοίγει το αρχείο κειμένου και το Κλείσε η λειτουργία κλείνει το αρχείο με a αναβάλλω δήλωση. ο Δημιουργώ η συνάρτηση δημιουργεί ένα αρχείο gzip και το NewWriter λειτουργία του gzip Το πακέτο γράφει το περιεχόμενο του αρχείου κειμένου στο αρχείο gzip χρησιμοποιώντας το αντίγραφο λειτουργία του io πακέτο.

ο Ξεπλύνετε μέθοδος του gzipWriter Το παράδειγμα ξεπλένει το πρόγραμμα εγγραφής gzip μόλις όλα τα δεδομένα είναι διαθέσιμα στο συμπιεσμένο αρχείο.

Μπορείτε να ανακτήσετε το αρχικό αρχείο από ένα αρχείο gzip μέσω μιας διαδικασίας αποσυμπίεσης. Η διαδικασία αποσυμπίεσης ενός αρχείου είναι παρόμοια. θα ανοίξετε το αρχείο και θα δημιουργήσετε ένα πρόγραμμα ανάγνωσης αρχείων gzip και, στη συνέχεια, δημιουργήστε ένα νέο αρχείο για να κρατήσετε τα ασυμπίεστα δεδομένα πριν αντιγράψετε τα περιεχόμενα στο νέο αρχείο.

εισαγωγή (
"συμπίεση/gzip"
"io"
"os"
)

funcκύριος() {
// Ανοίξτε το αρχείο gzip
gzippedFile, err := os. Ανοιξε("example.txt.gz")
αν λάθος!= μηδέν {
πανικός(πλανώμαι)
}
αναβάλλω gzippedFile. Κλείσε()

// Δημιουργία νέου προγράμματος ανάγνωσης gzip
gzipReader, err := gzip. NewReader (gzippedFile)
αναβάλλω gzipReader. Κλείσε()

// Δημιουργία νέου αρχείου για τη διατήρηση των ασυμπίεστων δεδομένων
uncompressedFile, err := os. Δημιουργώ("example.txt")
αν λάθος!= μηδέν {
πανικός(πλανώμαι)
}
αναβάλλω μη συμπιεσμένο Αρχείο. Κλείσε()

// Αντιγράψτε τα περιεχόμενα του προγράμματος ανάγνωσης gzip στο νέο αρχείο
_, err = io. Αντιγραφή (ασυμπίεστο Αρχείο, gzipReader)
αν λάθος!= μηδέν {
πανικός(πλανώμαι)
}
}

ο Ανοιξε λειτουργία του os πακέτο ανοίγει το αρχείο gzip και το NewReader λειτουργία του gzip πακέτο διαβάζει το συμπιεσμένο αρχείο. ο Δημιουργώ λειτουργία του os Το πακέτο δημιουργεί ένα νέο αρχείο κειμένου. ο αντίγραφο η συνάρτηση αντιγράφει τα περιεχόμενα του gzipReader στο μη συμπιεσμένο Αρχείο.

Συμπίεση και αποσυμπίεση δεδομένων με το Zlib

Το Zlib είναι μια βιβλιοθήκη για συμπίεση και αποσυμπίεση δεδομένων. η βιβλιοθήκη χρησιμοποιεί επίσης τον αλγόριθμο LZ77. Το Zlib είναι γραμμένο σε C και χρησιμοποιείται ευρέως ως βάση για άλλες βιβλιοθήκες συμπίεσης και λογισμικό. Διαφορετικός gzip, zlib είναι μια βιβλιοθήκη, και zlib δεν περιλαμβάνει α μορφή αρχείου. Ωστόσο, χρησιμοποιείται συχνά για τη συμπίεση δεδομένων που είναι αποθηκευμένα σε μορφές κοντέινερ, όπως PNG ή HTTP.

Η διαδικασία συμπίεσης με zlib είναι η ίδια όπως και για το gzip. Θα δημιουργήσετε ένα αρχείο zlib, θα διαμορφώσετε ένα πρόγραμμα εγγραφής, θα ανοίξετε το αρχικό αρχείο και θα αντιγράψετε τα περιεχόμενα στο συμπιεσμένο αρχείο.

εισαγωγή (
"συμπίεση/zlib"
"io"
"os"
)

funcκύριος() {
// Δημιουργία νέου αρχείου "example.zlib"
αρχείο, err := os. Δημιουργώ("example.zlib")
// Εάν παρουσιαστεί σφάλμα, πανικοβληθείτε και σταματήστε το πρόγραμμα
αν λάθος!= μηδέν {
πανικός(πλανώμαι)
}
// Βεβαιωθείτε ότι το αρχείο είναι κλειστό μετά την επιστροφή της συνάρτησης
αναβάλλω αρχείο. Κλείσε()

// Δημιουργήστε ένα νέο πρόγραμμα εγγραφής zlib με το καλύτερο επίπεδο συμπίεσης
συγγραφέας, λάθος := zlib. NewWriterLevel (αρχείο, zlib. Καλύτερη Συμπίεση)
// Εάν παρουσιαστεί σφάλμα, πανικοβληθείτε και σταματήστε το πρόγραμμα
αν λάθος!= μηδέν {
πανικός(πλανώμαι)
}
// Βεβαιωθείτε ότι το πρόγραμμα εγγραφής είναι κλειστό μετά την επιστροφή της συνάρτησης
αναβάλλω συγγραφέας. Κλείσε()

// Ανοίξτε το αρχείο εισόδου "example.txt"
inputFile, err := os. Ανοιξε("example.txt")
// Εάν παρουσιαστεί σφάλμα, πανικοβληθείτε και σταματήστε το πρόγραμμα
αν λάθος!= μηδέν {
πανικός(πλανώμαι)
}
// Βεβαιωθείτε ότι το αρχείο εισόδου είναι κλειστό μετά την επιστροφή της συνάρτησης
αναβάλλω inputFile. Κλείσε()

// Αντιγράψτε τα περιεχόμενα του αρχείου εισόδου στο πρόγραμμα εγγραφής
io. Αντιγραφή (writer, inputFile)
}

ο Δημιουργώ μέθοδος δημιουργεί το αρχείο zlib και το NewWriterLevel συνάρτηση δημιουργεί ένα πρόγραμμα εγγραφής για το αρχείο με την καθορισμένη επιλογή (στην περίπτωση αυτή, το Καλύτερη Συμπίεση επιλογή). ο Ανοιξε μέθοδος του os πακέτο ανοίγει το αρχείο κειμένου και το αντίγραφο λειτουργία του io Το πακέτο αντιγράφει το περιεχόμενο του αρχείου κειμένου στο αρχείο zlib στη διαδικασία συμπίεσης.

Για να αποσυμπιέσετε το αρχείο zlib, θα χρειαστεί να ανοίξετε το συμπιεσμένο αρχείο, να δημιουργήσετε ένα νέο πρόγραμμα ανάγνωσης zlib και, στη συνέχεια, να αντιγράψετε το περιεχόμενο του προγράμματος ανάγνωσης σε τυπική έξοδο.

εισαγωγή (
"συμπίεση/zlib"
"io"
"os"
)

funcκύριος() {
// Ανοίξτε το συμπιεσμένο αρχείο "compressed_file.zlib"
αρχείο, err := os. Ανοιξε("compressed_file.zlib")
// Εάν παρουσιαστεί σφάλμα, πανικοβληθείτε και σταματήστε το πρόγραμμα
αν λάθος!= μηδέν {
πανικός(πλανώμαι)
}
// Βεβαιωθείτε ότι το αρχείο είναι κλειστό μετά την επιστροφή της συνάρτησης
αναβάλλω αρχείο. Κλείσε()

// Δημιουργία νέου προγράμματος ανάγνωσης zlib για το συμπιεσμένο αρχείο
αναγνώστης, err := zlib. NewReader (αρχείο)
// Εάν παρουσιαστεί σφάλμα, πανικοβληθείτε και σταματήστε το πρόγραμμα
αν λάθος!= μηδέν {
πανικός(πλανώμαι)
}
// Βεβαιωθείτε ότι ο αναγνώστης είναι κλειστός μετά την επιστροφή της συνάρτησης
αναβάλλω αναγνώστης. Κλείσε()

// Αντιγράψτε τα περιεχόμενα του αναγνώστη στην τυπική έξοδο
io. Αντίγραφο (os. Stdout, αναγνώστης)
}

Η κύρια συνάρτηση ανοίγει το αρχείο zlib με το os του πακέτου Ανοιξε λειτουργία, και το NewReader λειτουργία του zlib Το πακέτο διαβάζει το αρχείο zlib σε μια παρουσία αναγνώστη. ο αντίγραφο μέθοδος του io Το πακέτο αντιγράφει το περιεχόμενο από τον αναγνώστη στην τυπική έξοδο (σε αυτήν την περίπτωση, την κονσόλα).

Η σύνταξη κώδικα για συμπίεση αρχείων είναι χρήσιμη για την αυτοματοποίηση εργασιών και τη συμπίεση πολλών αρχείων. Εάν χρειάζεται μόνο να συμπιέσετε μερικά αρχεία, μπορείτε να καταφύγετε στη χρήση εφαρμογών όπως το WinRar, το WinZip, το Express Zip και το Bandizip.