Lezers zoals jij steunen MUO. Wanneer u een aankoop doet via links op onze site, kunnen we een aangesloten commissie verdienen. Lees verder.

De algoritmen Gzip en Zlib worden in de volksmond gebruikt om bestanden te comprimeren en decomprimeren. Gzip wordt voornamelijk gebruikt voor het comprimeren van enkele bestanden, terwijl Zlib voornamelijk datastromen comprimeert. De algoritmen gebruiken het Deflate Compression Algorithm voor compressie, hoewel Gzip extra functies biedt, waaronder foutcontrole en bestandsmetadata.

Gzip heeft betere compressieverhoudingen geleverd dan Zlib. Gzip vereist echter meer verwerkingskracht om gegevens te comprimeren en decomprimeren. In de meeste gevallen moet u Gzip gebruiken voor het comprimeren van bestanden en Zlib voor het comprimeren van datastromen.

Go biedt de functionaliteit voor het comprimeren van gegevens, inclusief bestanden via de samendrukken pakket.

Het compressiepakket

De samendrukken pakket ondersteunt het comprimeren van gegevens via de comprimeren/gzip En comprimeren/zlib pakketten, naast andere functionaliteiten.

instagram viewer

De gzip pakket ondersteunt het comprimeren en decomprimeren van de gegevens in het gzip-bestandsformaat, inclusief lees- en schrijfbewerkingen zoals gespecificeerd in RFC 1952. Terwijl de zlib pakket helpt bij het comprimeren en decomprimeren van gegevens in het zlib-formaat.

U kunt importeren gzip En zlib van de samendrukken pakket met behulp van de importeren trefwoord.

importeren (
"comprimeren/gzip"// gzip importeren

"comprimeren/zlib"// importeer zlib
)

Bestanden comprimeren en decomprimeren met Gzip

Gzip is een bestandsindeling en een softwaretoepassing voor bestandscompressie en -decompressie. Gzip gebruikt het Lempel-Ziv-Markov-ketenalgoritme (LZ77) om gegevens te comprimeren, en het algoritme wordt vaak gebruikt voor het comprimeren van tekstbestanden, zoals HTML-, CSS- of JavaScript-bestanden.

Het proces van het comprimeren van bestanden met de gzip pakket is eenvoudig en intuïtief. U moet het bestand openen, een gzip-bestand maken, een gzip-schrijver maken en het origineel kopiëren de inhoud van het bestand naar de gzip-schrijver vóór de spoelbewerking die ervoor zorgt dat het schrijfproces is compleet.

Voer dit uit bash commando in de terminal van uw werkdirectory op Unix-systemen om een ​​voorbeeldtekstbestand te maken en vervolgens tekst in het bestand in te voegen.

// maakt een tekstbestand aan.
raak voorbeeld.txt aan

// pipet de string naar het bestand
echo 'Hallo wereld!' > voorbeeld.txt}

Nadat je het bestand hebt gemaakt en de tekst hebt ingevoegd, kun je het gzip, io, En os pakketten voor de compressieoperatie.

Hier ziet u hoe u de comprimeren/gzip pakket om een ​​tekstbestand te comprimeren.

importeren (
"comprimeren/gzip"
"io"
"os"
)

funcvoornaamst() {
// Open het originele bestand
origineelBestand, err := os. Open("voorbeeld.txt")
als fout!= nihil {
paniek(fout)
}
verschuiven origineelBestand. Dichtbij()

// Maak een nieuw gzipped bestand aan
gzippedFile, err := os. Creëren("voorbeeld.txt.gz")
als fout!= nihil {
paniek(fout)
}
verschuiven gzip-bestand. Dichtbij()

// Maak een nieuwe gzip-schrijver
gzipWriter := gzip. NewWriter (gzippedFile)
verschuiven gzipWriter. Dichtbij()

// Kopieer de inhoud van het originele bestand naar de gzip-schrijver
_, fout = io. Kopiëren (gzipWriter, origineelBestand)
als fout!= nihil {
paniek(fout)
}

// Flush de gzip-schrijver om ervoor te zorgen dat alle gegevens worden geschreven
gzipWriter. doorspoelen()
}

De Open functie van de os package opent het tekstbestand en het Dichtbij functie sluit het bestand met een verschuiven stelling. De Creëren functie maakt een gzipped bestand aan, en de NieuweSchrijver functie van de gzip pakket schrijft de inhoud van het tekstbestand naar het gzip-bestand met behulp van de Kopiëren functie van de io pakket.

De Doorspoelen methode van de gzipWriter instantie leegt de gzip-schrijver zodra alle gegevens beschikbaar zijn in het gecomprimeerde bestand.

U kunt het originele bestand ophalen uit een gzipped bestand via een decompressieproces. Het proces van het decomprimeren van een bestand is vergelijkbaar; u opent het bestand en maakt een gzip-bestandslezer en maakt vervolgens een nieuw bestand om de niet-gecomprimeerde gegevens op te slaan voordat u de inhoud naar het nieuwe bestand kopieert.

importeren (
"comprimeren/gzip"
"io"
"os"
)

funcvoornaamst() {
// Open het gecomprimeerde bestand
gzippedFile, err := os. Open("voorbeeld.txt.gz")
als fout!= nihil {
paniek(fout)
}
verschuiven gzip-bestand. Dichtbij()

// Maak een nieuwe gzip-lezer
gzipReader, fout := gzip. NewReader (gzippedFile)
verschuiven gzipReader. Dichtbij()

// Maak een nieuw bestand om de niet-gecomprimeerde gegevens te bewaren
niet-gecomprimeerd bestand, err := os. Creëren("voorbeeld.txt")
als fout!= nihil {
paniek(fout)
}
verschuiven niet-gecomprimeerd bestand. Dichtbij()

// Kopieer de inhoud van de gzip-lezer naar het nieuwe bestand
_, fout = io. Kopiëren (niet-gecomprimeerd bestand, gzipReader)
als fout!= nihil {
paniek(fout)
}
}

De Open functie van de os pakket opent het gzipped bestand en het nieuwelezer functie van de gzip pakket leest het gezipte bestand. De Creëren functie van de os pakket maakt een nieuw tekstbestand aan. De Kopiëren functie kopieert de inhoud van het gzipReader naar de niet-gecomprimeerd bestand.

Gegevens comprimeren en decomprimeren met Zlib

Zlib is een bibliotheek voor datacompressie en -decompressie; de bibliotheek gebruikt ook het LZ77-algoritme. Zlib is geschreven in C en wordt veel gebruikt als basis voor andere compressiebibliotheken en software. in tegenstelling tot gzip, zlib is een bibliotheek, en zlib omvat niet een bestandsformaat. Het wordt echter vaak gebruikt om gegevens te comprimeren die zijn opgeslagen in containerindelingen, zoals PNG of HTTP.

Het proces van comprimeren met zlib is hetzelfde als voor gzip. U maakt een zlib-bestand, configureert een schrijver, opent het originele bestand en kopieert de inhoud naar het gecomprimeerde bestand.

importeren (
"comprimeren/zlib"
"io"
"os"
)

funcvoornaamst() {
// Maak een nieuw bestand "example.zlib"
bestand, fout := os. Creëren("voorbeeld.zlib")
// Als er een fout optreedt, raak dan in paniek en stop het programma
als fout!= nihil {
paniek(fout)
}
// Zorg ervoor dat het bestand wordt gesloten nadat de functie terugkeert
verschuiven bestand. Dichtbij()

// Maak een nieuwe zlib-schrijver met het beste compressieniveau
schrijver, fout := zlib. NewWriterLevel (bestand, zlib. beste compressie)
// Als er een fout optreedt, raak dan in paniek en stop het programma
als fout!= nihil {
paniek(fout)
}
// Zorg ervoor dat de schrijver wordt gesloten nadat de functie terugkeert
verschuiven auteur. Dichtbij()

// Open het invoerbestand "example.txt"
inputFile, err := os. Open("voorbeeld.txt")
// Als er een fout optreedt, raak dan in paniek en stop het programma
als fout!= nihil {
paniek(fout)
}
// Zorg ervoor dat het invoerbestand wordt gesloten nadat de functie terugkeert
verschuiven Invoer bestand. Dichtbij()

// Kopieer de inhoud van het invoerbestand naar de schrijver
io. Kopiëren (schrijver, invoerbestand)
}

De Creëren methode maakt het zlib-bestand en het NewWriterNiveau functie maakt een schrijver voor het bestand met de opgegeven optie (in dit geval de Beste compressie keuze). De Open methode van de os package opent het tekstbestand en het Kopiëren functie van de io pakket kopieert de inhoud van het tekstbestand naar het zlib-bestand in het compressieproces.

Om het zlib-bestand te decomprimeren, moet u het gecomprimeerde bestand openen, een nieuwe zlib-lezer maken en vervolgens de inhoud van de lezer naar de standaarduitvoer kopiëren.

importeren (
"comprimeren/zlib"
"io"
"os"
)

funcvoornaamst() {
// Open het gecomprimeerde bestand "compressed_file.zlib"
bestand, fout := os. Open("gecomprimeerd_bestand.zlib")
// Als er een fout optreedt, raak dan in paniek en stop het programma
als fout!= nihil {
paniek(fout)
}
// Zorg ervoor dat het bestand wordt gesloten nadat de functie terugkeert
verschuiven bestand. Dichtbij()

// Maak een nieuwe zlib-lezer voor het gecomprimeerde bestand
lezer, fout := zlib. NewReader (bestand)
// Als er een fout optreedt, raak dan in paniek en stop het programma
als fout!= nihil {
paniek(fout)
}
// Zorg ervoor dat de lezer wordt gesloten nadat de functie terugkeert
verschuiven lezer. Dichtbij()

// Kopieer de inhoud van de reader naar de standaarduitvoer
io. Kopiëren (ov. Stout, lezer)
}

De hoofdfunctie opent het zlib-bestand met de os pakketjes Open functie, en de nieuwelezer functie van de zlib package leest het zlib-bestand in een reader-instantie. De Kopiëren methode van de io pakket kopieert de inhoud van de lezer naar de standaarduitvoer (in dit geval de console).

Het schrijven van code voor bestandscompressie is handig voor het automatiseren van taken en het comprimeren van meerdere bestanden. Als u slechts een paar bestanden hoeft te comprimeren, kunt u gebruik maken van toepassingen zoals WinRar, WinZip, Express Zip en Bandizip.