Algoritmerna Gzip och Zlib används allmänt för att komprimera och dekomprimera filer. Gzip används främst för att komprimera enstaka filer, medan Zlib huvudsakligen komprimerar dataströmmar. Algoritmerna använder Deflate Compression Algorithm för komprimering, även om Gzip tillhandahåller ytterligare funktioner inklusive felkontroll och filmetadata.
Gzip har gett bättre kompressionsförhållanden än Zlib. Gzip kräver dock mer processorkraft för att komprimera och dekomprimera data. I de flesta fall bör du använda Gzip för att komprimera filer och Zlib för att komprimera dataströmmar.
Go tillhandahåller funktionen för att komprimera data, inklusive filer via komprimera paket.
Komprimeringspaketet
De komprimera paketet stöder komprimering av data via komprimera/gzip och komprimera/zlib paket, bland andra funktioner.
De gzip paketet stöder komprimering och dekomprimering av gzip-filformatdata, inklusive läs- och skrivoperationer som specificeras i
RFC 1952. Medan zlib paketet hjälper till med att komprimera och dekomprimera data i zlib-formatet.Du kan importera gzip och zlib från komprimera paket med hjälp av importera nyckelord.
importera (
"komprimera/gzip"// importera gzip
"komprimera/zlib"// importera zlib
)
Komprimera och dekomprimera filer med Gzip
Gzip är ett filformat och ett program för filkomprimering och dekomprimering. Gzip använder Lempel-Ziv-Markov-kedjealgoritmen (LZ77) för att komprimera data, och algoritmen används ofta för att komprimera textfiler, såsom HTML-, CSS- eller JavaScript-filer.
Processen att komprimera filer med gzip paketet är enkelt och intuitivt. Du måste öppna filen, skapa en gzip-fil, skapa en gzip-skrivare och kopiera originalet filens innehåll till gzip-skrivaren innan tömningsoperationen som säkerställer att skrivprocessen är komplett.
Kör detta bash kommando i terminalen i din arbetskatalog på Unix-system för att skapa en exempeltextfil och infoga sedan text i filen.
// skapar en textfil.
tryck på exempel.txt
// skickar strängen till filen
echo 'Hej världen!' > exempel.txt}
När du har skapat filen och infogat texten kan du importera gzip, io, och os paket för komprimeringsoperationen.
Så här kan du använda komprimera/gzip paket för att komprimera en textfil.
importera (
"komprimera/gzip"
"io"
"os"
)funchuvud() {
// Öppna originalfilen
originalfil, fel := os. Öppen("exempel.txt")
om fel!= noll {
panik(fela)
}
uppskjuta originalfil. Stänga()// Skapa en ny gzip-fil
gzippedFile, err := os. Skapa("example.txt.gz")
om fel!= noll {
panik(fela)
}
uppskjuta gzippedFile. Stänga()// Skapa en ny gzip-skrivare
gzipWriter := gzip. NewWriter (gzippedFile)
uppskjuta gzipWriter. Stänga()// Kopiera innehållet i originalfilen till gzip-skrivaren
_, fel = io. Kopiera (gzipWriter, originalFile)
om fel!= noll {
panik(fela)
}
// Spola gzip-skrivaren för att säkerställa att all data skrivs
gzipWriter. Spola()
}
De Öppen funktion av os paketet öppnar textfilen och Stänga funktionen stänger filen med en uppskjuta påstående. De Skapa funktionen skapar en gzippad fil, och NewWriter funktion av gzip paketet skriver innehållet i textfilen till gzip-filen med hjälp av Kopiera funktion av io paket.
De Spola metod för gzipWriter instans tömmer gzip-skrivaren när all data är tillgänglig på den zippade filen.
Du kan hämta originalfilen från en gzippad fil genom en dekomprimeringsprocess. Processen att dekomprimera en fil är liknande; du öppnar filen och skapar en gzip-filläsare och skapar sedan en ny fil för att hålla okomprimerad data innan du kopierar innehållet till den nya filen.
importera (
"komprimera/gzip"
"io"
"os"
)funchuvud() {
// Öppna den gzippade filen
gzippedFile, err := os. Öppen("example.txt.gz")
om fel!= noll {
panik(fela)
}
uppskjuta gzippedFile. Stänga()// Skapa en ny gzip-läsare
gzipReader, err := gzip. NewReader (gzippedFile)
uppskjuta gzipReader. Stänga()// Skapa en ny fil för att hålla okomprimerad data
uncompressedFile, err := os. Skapa("exempel.txt")
om fel!= noll {
panik(fela)
}
uppskjuta okomprimerad fil. Stänga()
// Kopiera innehållet i gzip-läsaren till den nya filen
_, fel = io. Kopiera (okomprimerad fil, gzipReader)
om fel!= noll {
panik(fela)
}
}
De Öppen funktion av os paketet öppnar den gzippade filen och NewReader funktion av gzip paketet läser den zippade filen. De Skapa funktion av os paketet skapar en ny textfil. De Kopiera funktionen kopierar innehållet i gzipReader till okomprimerad fil.
Komprimera och dekomprimera data med Zlib
Zlib är ett bibliotek för datakomprimering och dekompression; biblioteket använder också LZ77-algoritmen. Zlib är skrivet i C och används ofta som grund för andra komprimeringsbibliotek och mjukvara. Till skillnad från gzip, zlib är ett bibliotek, och zlib omfattar inte a filformat. Det används dock ofta för att komprimera data som lagras i containerformat, som PNG eller HTTP.
Processen att komprimera med zlib är densamma som för gzip. Du skapar en zlib-fil, konfigurerar en författare, öppnar originalfilen och kopierar innehållet till den komprimerade filen.
importera (
"komprimera/zlib"
"io"
"os"
)funchuvud() {
// Skapa en ny fil "example.zlib"
fil, fel := os. Skapa("example.zlib")
// Om ett fel uppstår, få panik och stoppa programmet
om fel!= noll {
panik(fela)
}
// Se till att filen stängs efter att funktionen returneras
uppskjuta fil. Stänga()// Skapa en ny zlib-skrivare med den bästa komprimeringsnivån
författare, fel := zlib. NewWriterLevel (fil, zlib. Bästa kompression)
// Om ett fel uppstår, få panik och stoppa programmet
om fel!= noll {
panik(fela)
}
// Se till att skrivaren är stängd efter att funktionen returneras
uppskjuta författare. Stänga()// Öppna inmatningsfilen "example.txt"
inputFile, err := os. Öppen("exempel.txt")
// Om ett fel uppstår, få panik och stoppa programmet
om fel!= noll {
panik(fela)
}
// Se till att indatafilen stängs efter att funktionen returneras
uppskjuta indatafil. Stänga()
// Kopiera innehållet i inmatningsfilen till skribenten
io. Kopiera (skrivare, inputFile)
}
De Skapa metoden skapar zlib-filen och NewWriterLevel funktionen skapar en skrivare för filen med det angivna alternativet (i det här fallet Bästa komprimering alternativ). De Öppen metod för os paketet öppnar textfilen och Kopiera funktion av io paketet kopierar innehållet i textfilen till zlib-filen i komprimeringsprocessen.
För att dekomprimera zlib-filen måste du öppna den komprimerade filen, skapa en ny zlib-läsare och sedan slutligen kopiera innehållet i läsaren till standardutdata.
importera (
"komprimera/zlib"
"io"
"os"
)funchuvud() {
// Öppna den komprimerade filen "compressed_file.zlib"
fil, fel := os. Öppen("compressed_file.zlib")
// Om ett fel uppstår, få panik och stoppa programmet
om fel!= noll {
panik(fela)
}
// Se till att filen stängs efter att funktionen returneras
uppskjuta fil. Stänga()// Skapa en ny zlib-läsare för den komprimerade filen
läsare, fel := zlib. NewReader (fil)
// Om ett fel uppstår, få panik och stoppa programmet
om fel!= noll {
panik(fela)
}
// Se till att läsaren är stängd efter att funktionen kommer tillbaka
uppskjuta läsare. Stänga()
// Kopiera innehållet i läsaren till standardutdata
io. Kopiera (os. Stdout, läsare)
}
Huvudfunktionen öppnar zlib-filen med os paketets Öppen funktion och NewReader funktion av zlib paketet läser zlib-filen till en läsarinstans. De Kopiera metod för io paketet kopierar innehållet från läsaren till standardutgången (i det här fallet konsolen).
Att skriva kod för filkomprimering är praktiskt för att automatisera uppgifter och komprimera flera filer. Om du bara behöver komprimera några få filer kan du använda applikationer som WinRar, WinZip, Express Zip och Bandizip.