Dieses Go-Sprachpaket unterstützt das Lesen und Schreiben von xz-komprimierten Streams. Es enthält auch einen gxz-Befehl zum Komprimieren und Dekomprimieren von Daten. Das Paket ist vollständig in Go geschrieben und ist nicht von C-Code abhängig.
Das Paket befindet sich derzeit in der Entwicklung. Es können Fehler vorliegen und APIs gelten nicht als stabil. Derzeit kann das Paket hinsichtlich Komprimierungsgeschwindigkeit und Größe nicht mit dem xz-Tool konkurrieren. Die dortigen Algorithmen sind über einen langen Zeitraum entwickelt und hochoptimiert. Es sind jedoch eine Reihe von Verbesserungen geplant und ich bin hinsichtlich der parallelen Komprimierung und Dekomprimierung sehr optimistisch. Bleiben Sie dran!
Das folgende Beispielprogramm zeigt, wie die API verwendet wird.
package main
import (
"bytes"
"io"
"log"
"os"
"github.com/ulikunitz/xz"
)
func main () {
const text = "The quick brown fox jumps over the lazy dog. n "
var buf bytes. Buffer
// compress text
w , err := xz . NewWriter ( & buf )
if err != nil {
log . Fatalf ( "xz.NewWriter error %s" , err )
}
if _ , err := io . WriteString ( w , text ); err != nil {
log . Fatalf ( "WriteString error %s" , err )
}
if err := w . Close (); err != nil {
log . Fatalf ( "w.Close error %s" , err )
}
// decompress buffer and write output to stdout
r , err := xz . NewReader ( & buf )
if err != nil {
log . Fatalf ( "NewReader error %s" , err )
}
if _ , err = io . Copy ( os . Stdout , r ); err != nil {
log . Fatalf ( "io.Copy error %s" , err )
}
}
Die vollständige Dokumentation finden Sie unter pkg.go.dev.
Das Paket enthält ein gxz-Befehlszeilenprogramm zur Komprimierung und Dekomprimierung.
Verwenden Sie für die Installation den folgenden Befehl:
$ go get github.com/ulikunitz/xz/cmd/gxz
Um es zu testen, rufen Sie den folgenden Befehl auf.
$ gxz bigfile
Nach einiger Zeit wird bigfile durch eine viel kleinere Datei, bigfile.xz, ersetzt. Um es zu dekomprimieren, verwenden Sie den folgenden Befehl.
$ gxz -d bigfile.xz
Die Sicherheitsrichtlinie ist in SECURITY.md dokumentiert.
Die Software ist vom Supply-Chain-Angriff auf die ursprüngliche xz-Implementierung, CVE-2024-3094, nicht betroffen. Diese Implementierung teilt keine Dateien mit der ursprünglichen xz-Implementierung und es werden keine Patches oder Pull-Anfragen ohne Überprüfung akzeptiert.
Alle Sicherheitshinweise für dieses Projekt werden unter github.com/ulikunitz/xz/security/advisories veröffentlicht.