Algoritmii Gzip și Zlib sunt utilizați în mod popular pentru a comprima și decomprima fișierele. Gzip este folosit în principal pentru comprimarea fișierelor individuale, în timp ce Zlib comprimă în principal fluxurile de date. Algoritmii folosesc algoritmul Deflate Compression pentru compresie, deși Gzip oferă funcții suplimentare, inclusiv verificarea erorilor și metadatele fișierului.
Gzip a oferit rapoarte de compresie mai bune decât Zlib. Cu toate acestea, Gzip necesită mai multă putere de procesare pentru a comprima și decomprima datele. În cele mai multe cazuri, ar trebui să utilizați Gzip pentru comprimarea fișierelor și Zlib pentru comprimarea fluxurilor de date.
Go oferă funcționalitatea pentru comprimarea datelor, inclusiv a fișierelor prin intermediul comprima pachet.
Pachetul Compress
The comprima pachetul acceptă comprimarea datelor prin intermediul
comprima/gzip și compres/zlib pachete, printre alte funcționalități.The gzip pachetul acceptă comprimarea și decomprimarea datelor în formatul fișierului gzip, inclusiv operațiunile de citire și scriere, așa cum este specificat în RFC 1952. In timp ce zlib pachetul ajută la comprimarea și decomprimarea datelor în format zlib.
Puteți importa gzip și zlib de la comprima pachet folosind import cuvânt cheie.
import (
"comprimare/gzip"// import gzip
"comprimare/zlib"// import zlib
)
Comprimarea și decomprimarea fișierelor cu Gzip
Gzip este un format de fișier și o aplicație software pentru compresia și decomprimarea fișierelor. Gzip folosește algoritmul de lanț Lempel-Ziv-Markov (LZ77) pentru a comprima datele, iar algoritmul este adesea folosit pentru comprimarea fișierelor text, cum ar fi fișierele HTML, CSS sau JavaScript.
Procesul de comprimare a fișierelor cu gzip pachetul este simplu și intuitiv. Va trebui să deschideți fișierul, să creați un fișier gzip, să creați un scriitor gzip și să copiați originalul conținutul fișierului către scriitorul gzip înainte de operația de spălare care asigură că procesul de scriere este complet.
Rulați asta comanda bash în terminalul directorului dvs. de lucru pe sistemele Unix pentru a crea un fișier text exemplu și apoi introduceți text în fișier.
// creează un fișier text.
atinge example.txt
// direcționează șirul către fișier
echo „Bună, lume!” > example.txt}
După crearea fișierului și inserarea textului, puteți importa fișierul gzip, io, și os pachete pentru operația de compresie.
Iată cum puteți utiliza comprima/gzip pachet pentru a comprima un fișier text.
import (
"comprimare/gzip"
"io"
"os"
)funcprincipal() {
// Deschideți fișierul original
originalFile, err := os. Deschis(„example.txt”)
dacă greș!= zero {
panică(eroare)
}
amâna originalFile. Închide()// Creați un nou fișier gzipped
gzippedFile, err := os. Crea(„example.txt.gz”)
dacă greș!= zero {
panică(eroare)
}
amâna gzippedFile. Închide()// Creați un nou scriitor gzip
gzipWriter := gzip. NewWriter (gzippedFile)
amâna gzipWriter. Închide()// Copiați conținutul fișierului original în scriitorul gzip
_, err = io. Copiere (gzipWriter, originalFile)
dacă greș!= zero {
panică(eroare)
}
// Spălați writerul gzip pentru a vă asigura că toate datele sunt scrise
gzipWriter. Culoare()
}
The Deschis funcția de os pachetul deschide fișierul text și Închide funcția închide fișierul cu a amâna afirmație. The Crea funcția creează un fișier gzipped și NewWriter funcția de gzip pachetul scrie conținutul fișierului text în fișierul gzip folosind Copie funcția de io pachet.
The Culoare metoda de gzipWriter instanța șterge scriitorul gzip odată ce toate datele sunt disponibile în fișierul arhivat.
Puteți prelua fișierul original dintr-un fișier gzipped printr-un proces de decompresie. Procesul de decomprimare a unui fișier este similar; veți deschide fișierul și veți crea un cititor de fișiere gzip, apoi veți crea un fișier nou pentru a păstra datele necomprimate înainte de a copia conținutul în noul fișier.
import (
"comprimare/gzip"
"io"
"os"
)funcprincipal() {
// Deschideți fișierul gzipped
gzippedFile, err := os. Deschis(„example.txt.gz”)
dacă greș!= zero {
panică(eroare)
}
amâna gzippedFile. Închide()// Creați un nou cititor gzip
gzipReader, err := gzip. NewReader (gzippedFile)
amâna gzipReader. Închide()// Creați un fișier nou pentru a păstra datele necomprimate
uncompressedFile, err := os. Crea(„example.txt”)
dacă greș!= zero {
panică(eroare)
}
amâna uncompressedFile. Închide()
// Copiați conținutul cititorului gzip în noul fișier
_, err = io. Copiați (fișier necomprimat, gzipReader)
dacă greș!= zero {
panică(eroare)
}
}
The Deschis funcția de os pachetul deschide fișierul gzipped și NewReader funcția de gzip pachetul citește fișierul arhivat. The Crea funcția de os pachetul creează un fișier text nou. The Copie funcția copiază conținutul fișierului gzipReader la uncompressedFile.
Comprimarea și decomprimarea datelor cu Zlib
Zlib este o bibliotecă pentru compresia și decompresia datelor; biblioteca folosește și algoritmul LZ77. Zlib este scris în C și este utilizat pe scară largă ca bază pentru alte biblioteci și software de compresie. Spre deosebire de gzip, zlib este o bibliotecă și zlib nu include a tipul fisierului. Cu toate acestea, este adesea folosit pentru a comprima datele stocate în formate container, cum ar fi PNG sau HTTP.
Procesul de comprimare cu zlib este același ca și pentru gzip. Veți crea un fișier zlib, veți configura un writer, veți deschide fișierul original și veți copia conținutul în fișierul comprimat.
import (
"comprimare/zlib"
"io"
"os"
)funcprincipal() {
// Creați un fișier nou „example.zlib”
fișier, err := os. Crea(„example.zlib”)
// Dacă apare o eroare, intrați în panică și opriți programul
dacă greș!= zero {
panică(eroare)
}
// Asigurați-vă că fișierul este închis după revenirea funcției
amâna fişier. Închide()// Creați un nou writer zlib cu cel mai bun nivel de compresie
scriitor, err := zlib. NewWriterLevel (fișier, zlib. Cea mai bună compresie)
// Dacă apare o eroare, intrați în panică și opriți programul
dacă greș!= zero {
panică(eroare)
}
// Asigurați-vă că writer-ul este închis după ce funcția revine
amâna scriitor. Închide()// Deschideți fișierul de intrare „example.txt”
inputFile, err := os. Deschis(„example.txt”)
// Dacă apare o eroare, intrați în panică și opriți programul
dacă greș!= zero {
panică(eroare)
}
// Asigurați-vă că fișierul de intrare este închis după revenirea funcției
amâna fișier de intrare. Închide()
// Copiați conținutul fișierului de intrare în writer
io. Copiere (writer, inputFile)
}
The Crea metoda creează fișierul zlib și NewWriterLevel funcția creează un writer pentru fișierul cu opțiunea specificată (în acest caz, Cea mai bună compresie opțiune). The Deschis metoda de os pachetul deschide fișierul text și Copie funcția de io pachetul copiază conținutul fișierului text în fișierul zlib în procesul de comprimare.
Pentru a decomprima fișierul zlib, va trebui să deschideți fișierul comprimat, să creați un nou cititor zlib și apoi să copiați conținutul cititorului în ieșirea standard.
import (
"comprimare/zlib"
"io"
"os"
)funcprincipal() {
// Deschideți fișierul comprimat „compressed_file.zlib”
fișier, err := os. Deschis(„fișier_comprimat.zlib”)
// Dacă apare o eroare, intrați în panică și opriți programul
dacă greș!= zero {
panică(eroare)
}
// Asigurați-vă că fișierul este închis după revenirea funcției
amâna fişier. Închide()// Creați un nou cititor zlib pentru fișierul comprimat
cititor, err := zlib. NewReader (fișier)
// Dacă apare o eroare, intrați în panică și opriți programul
dacă greș!= zero {
panică(eroare)
}
// Asigurați-vă că cititorul este închis după revenirea funcției
amâna cititor. Închide()
// Copiați conținutul cititorului în rezultatul standard
io. Copiere (os. Stdout, cititor)
}
Funcția principală deschide fișierul zlib cu os pachetelor Deschis funcția, iar NewReader funcția de zlib pachetul citește fișierul zlib într-o instanță de citire. The Copie metoda de io pachetul copiază conținutul din cititor în ieșirea standard (în acest caz, consola).
Scrierea codului pentru comprimarea fișierelor este utilă pentru automatizarea sarcinilor și comprimarea mai multor fișiere. Dacă trebuie să comprimați doar câteva fișiere, puteți recurge la utilizarea aplicațiilor precum WinRar, WinZip, Express Zip și Bandizip.