So komprimieren und dekomprimieren Sie Dateien in Golang

So komprimieren und dekomprimieren Sie Dateien in Golang

Die Gzip- und Zlib-Algorithmen werden allgemein zum Komprimieren und Dekomprimieren von Dateien verwendet. Gzip wird hauptsächlich zum Komprimieren einzelner Dateien verwendet, während Zlib hauptsächlich Datenströme komprimiert. Die Algorithmen verwenden den Deflate-Komprimierungsalgorithmus für die Komprimierung, obwohl Gzip zusätzliche Funktionen wie Fehlerprüfung und Dateimetadaten bietet.

Gzip bietet bessere Komprimierungsverhältnisse als Zlib. Gzip erfordert jedoch mehr Rechenleistung zum Komprimieren und Dekomprimieren von Daten. In den meisten Fällen sollten Sie Gzip zum Komprimieren von Dateien und Zlib zum Komprimieren von Datenströmen verwenden.

Go bietet die Funktionalität zum Komprimieren von Daten, einschließlich Dateien, über das Komprimierungspaket .

Das Compress-Paket

Inhalt des Komprimierungspakets

Das compress -Paket unterstützt neben anderen Funktionalitäten das Komprimieren von Daten durch die compress/gzip- und compress/zlib -Pakete.

Das gzip -Paket unterstützt das Komprimieren und Dekomprimieren von Daten im gzip-Dateiformat, einschließlich Lese- und Schreibvorgängen gemäß RFC 1952 . Während das zlib -Paket beim Komprimieren und Dekomprimieren von Daten im zlib-Format hilft.

Mit dem Schlüsselwort import können Sie gzip und zlib aus dem compress -Paket importieren.

import (
    "compress/gzip" // import gzip

    "compress/zlib" // import zlib
)

Komprimieren und Dekomprimieren von Dateien mit Gzip

Gzip ist ein Dateiformat und eine Softwareanwendung zur Dateikomprimierung und -dekomprimierung. Gzip verwendet den Lempel-Ziv-Markov-Kettenalgorithmus (LZ77) zum Komprimieren von Daten, und der Algorithmus wird häufig zum Komprimieren von Textdateien wie HTML-, CSS- oder JavaScript-Dateien verwendet.

Das Komprimieren von Dateien mit dem gzip -Paket ist einfach und intuitiv. Sie müssen die Datei öffnen, eine gzip-Datei erstellen, einen gzip-Writer erstellen und den Inhalt der Originaldatei in den gzip-Writer kopieren, bevor der Flush-Vorgang ausgeführt wird, der sicherstellt, dass der Schreibvorgang abgeschlossen ist.

Führen Sie diesen Bash-Befehl im Terminal Ihres Arbeitsverzeichnisses auf Unix-Systemen aus, um eine Beispieltextdatei zu erstellen, und fügen Sie dann Text in die Datei ein.

// creates a text file.
touch example.txt

// pipes the string to the file
echo 'Hello, world!' > example.txt}

Nachdem Sie die Datei erstellt und den Text eingefügt haben, können Sie die Pakete gzip , io und os für den Komprimierungsvorgang importieren.

So können Sie das Paket compress/gzip verwenden, um eine Textdatei zu komprimieren.

import (
    "compress/gzip"
    "io"
    "os"
)

func main() {
    // Open the original file
    originalFile, err: = os.Open("example.txt")
    if err! = nil {
        panic(err)
    }
    defer originalFile.Close()

    // Create a new gzipped file
    gzippedFile, err: = os.Create("example.txt.gz")
    if err! = nil {
        panic(err)
    }
    defer gzippedFile.Close()

    // Create a new gzip writer
    gzipWriter: = gzip.NewWriter(gzippedFile)
    defer gzipWriter.Close()

    // Copy the contents of the original file to the gzip writer
    _, err = io.Copy(gzipWriter, originalFile)
    if err! = nil {
        panic(err)
    }

    // Flush the gzip writer to ensure all data is written
    gzipWriter.Flush()
}

Die Open – Funktion des os -Pakets öffnet die Textdatei, und die Close -Funktion schließt die Datei mit einer defer – Anweisung. Die Create -Funktion erstellt eine gzip-Datei, und die NewWriter- Funktion des gzip -Pakets schreibt den Inhalt der Textdatei mithilfe der Copy – Funktion des io -Pakets in die gzip-Datei.

Die Flush – Methode der gzipWriter- Instanz leert den gzip-Writer, sobald alle Daten in der gezippten Datei verfügbar sind.

Sie können die Originaldatei aus einer gzip-Datei durch einen Dekomprimierungsprozess abrufen. Der Vorgang zum Dekomprimieren einer Datei ist ähnlich; Sie öffnen die Datei und erstellen einen gzip-Dateireader. Erstellen Sie dann eine neue Datei, um die unkomprimierten Daten zu speichern, bevor Sie den Inhalt in die neue Datei kopieren.

import (
    "compress/gzip"
    "io"
    "os"
)

func main() {
    // Open the gzipped file
    gzippedFile, err: = os.Open("example.txt.gz")
    if err! = nil {
        panic(err)
    }
    defer gzippedFile.Close()

    // Create a new gzip reader
    gzipReader, err: = gzip.NewReader(gzippedFile)
    defer gzipReader.Close()

    // Create a new file to hold the uncompressed data
    uncompressedFile, err: = os.Create("example.txt")
    if err! = nil {
        panic(err)
    }
    defer uncompressedFile.Close()

    // Copy the contents of the gzip reader to the new file
    _, err = io.Copy(uncompressedFile, gzipReader)
    if err! = nil {
        panic(err)
    }
}

Die Open – Funktion des os -Pakets öffnet die gzip-Datei, und die NewReader- Funktion des gzip -Pakets liest die gezippte Datei. Die Create – Funktion des os -Pakets erstellt eine neue Textdatei. Die Copy – Funktion kopiert den Inhalt des gzipReader in die uncompressedFile .

Komprimieren und Dekomprimieren von Daten mit Zlib

Zlib ist eine Bibliothek zur Datenkomprimierung und -dekomprimierung; Die Bibliothek verwendet auch den LZ77-Algorithmus. Zlib ist in C geschrieben und wird häufig als Grundlage für andere Komprimierungsbibliotheken und Software verwendet. Im Gegensatz zu gzip ist zlib eine Bibliothek, und zlib enthält kein Dateiformat. Es wird jedoch häufig verwendet, um Daten zu komprimieren, die in Containerformaten wie PNG oder HTTP gespeichert sind.

Der Komprimierungsprozess mit zlib ist derselbe wie bei gzip. Sie erstellen eine zlib-Datei, konfigurieren einen Writer, öffnen die Originaldatei und kopieren den Inhalt in die komprimierte Datei.

import (
   "compress/zlib"
   "io"
   "os"
)

func main() {
   // Create a new file "example.zlib"
   file, err: = os.Create("example.zlib")
   // If error occurs, panic and stop the program
   if err! = nil {
       panic(err)
   }
   // Ensure that the file is closed after the function returns
   defer file.Close()

   // Create a new zlib writer with the best compression level
   writer, err: = zlib.NewWriterLevel(file, zlib.BestCompression)
   // If error occurs, panic and stop the program
   if err! = nil {
       panic(err)
   }
   // Ensure that the writer is closed after the function returns
   defer writer.Close()

   // Open the input file "example.txt"
   inputFile, err: = os.Open("example.txt")
   // If error occurs, panic and stop the program
   if err! = nil {
       panic(err)
   }
   // Ensure that the input file is closed after the function returns
   defer inputFile.Close()

   // Copy the contents of the input file to the writer
   io.Copy(writer, inputFile)
}

Die Create -Methode erstellt die zlib-Datei und die NewWriterLevel- Funktion erstellt einen Writer für die Datei mit der angegebenen Option (in diesem Fall die BestCompression- Option). Die Open – Methode des os -Pakets öffnet die Textdatei, und die Copy – Funktion des io -Pakets kopiert den Inhalt der Textdatei während des Komprimierungsprozesses in die zlib-Datei.

Um die zlib-Datei zu dekomprimieren, müssen Sie die komprimierte Datei öffnen, einen neuen zlib-Reader erstellen und schließlich den Inhalt des Readers in die Standardausgabe kopieren.

import (
   "compress/zlib"
   "io"
   "os"
)

func main() {
   // Open the compressed file "compressed_file.zlib"
   file, err: = os.Open("compressed_file.zlib")
   // If error occurs, panic and stop the program
   if err! = nil {
       panic(err)
   }
   // Ensure that the file is closed after the function returns
   defer file.Close()

   // Create a new zlib reader for the compressed file
   reader, err: = zlib.NewReader(file)
   // If error occurs, panic and stop the program
   if err! = nil {
       panic(err)
   }
   // Ensure that the reader is closed after the function returns
   defer reader.Close()

   // Copy the contents of the reader to the standard output
   io.Copy(os.Stdout, reader)
}

Die main-Funktion öffnet die zlib-Datei mit der Open -Funktion des os -Pakets , und die NewReader- Funktion des zlib -Pakets liest die zlib-Datei in eine Reader-Instanz. Die Copy – Methode des io -Pakets kopiert den Inhalt vom Reader auf die Standardausgabe (in diesem Fall die Konsole).

Ausgabe von Text in der komprimierten Datei

Verwenden Sie diese Tools für die Dateikomprimierung

Das Schreiben von Code für die Dateikomprimierung ist praktisch, um Aufgaben zu automatisieren und mehrere Dateien zu komprimieren. Wenn Sie nur wenige Dateien komprimieren müssen, können Sie auf Anwendungen wie WinRar, WinZip, Express Zip und Bandizip zurückgreifen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert