xz
1.0.0
この Go 言語パッケージは、xz 圧縮ストリームの読み取りと書き込みをサポートしています。データを圧縮および解凍するための gxz コマンドも含まれています。パッケージは完全に Go で書かれており、C コードには一切依存していません。
パッケージは現在開発中です。バグが存在する可能性があり、API は安定していないと考えられます。現時点では、パッケージは圧縮速度とサイズに関して xz ツールと競合できません。アルゴリズムは長い時間をかけて開発され、高度に最適化されています。ただし、多くの改善が計画されており、並列圧縮と解凍については非常に楽観的です。乞うご期待!
次のプログラム例は、API の使用方法を示しています。
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 )
}
}
完全なドキュメントは pkg.go.dev で見つけることができます。
パッケージには、圧縮および解凍用の gxz コマンド ライン ユーティリティが含まれています。
インストールには次のコマンドを使用します。
$ go get github.com/ulikunitz/xz/cmd/gxz
それをテストするには、次のコマンドを呼び出します。
$ gxz bigfile
しばらくすると、はるかに小さいファイル bigfile.xz が bigfile を置き換えます。解凍するには次のコマンドを使用します。
$ gxz -d bigfile.xz
セキュリティ ポリシーは SECURITY.md に文書化されています。
このソフトウェアは、元の xz 実装に対するサプライ チェーン攻撃、CVE-2024-3094 の影響を受けません。この実装は元の xz 実装とファイルを共有せず、レビューなしでパッチやプル リクエストは受け入れられません。
このプロジェクトのすべてのセキュリティ アドバイザリは、github.com/ulikunitz/xz/security/advisories で公開されています。