ulikunitz/xz
GitHub: ulikunitz/xz
一个纯 Go 实现的 xz 压缩流读写库,解决 Go 项目中无 C 依赖地处理 xz 格式压缩与解压的需求。
Stars: 559 | Forks: 53
# xz 包
这个 Go 语言包支持读写 xz 压缩流。它还包含一个用于压缩和解压数据的 gxz 命令。该包完全使用 Go 编写,不依赖任何 C 代码。
该包目前正在开发中。可能存在 bug,且 API 尚未稳定。目前,该包在压缩速度和大小方面还无法与 xz 工具相媲美。相关的算法经过长时间的开发,已得到高度优化。不过,我们已经计划了一系列改进,并且对并行压缩和解压充满信心。敬请期待!
## 使用 API
以下示例程序展示了如何使用 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](https://pkg.go.dev/github.com/ulikunitz/xz) 找到完整的文档。
## 使用 gxz 压缩工具
该包包含一个用于压缩和解压的 gxz 命令行工具。
使用以下命令进行安装:
```
$ go get github.com/ulikunitz/xz/cmd/gxz
```
要测试它,请运行以下命令。
```
$ gxz bigfile
```
稍后,一个体积小得多的 bigfile.xz 文件将会替换 bigfile。
使用以下命令对其进行解压。
```
$ gxz -d bigfile.xz
```
## 安全与漏洞
安全策略记录在 [SECURITY.md](SECURITY.md) 中。
该软件未受到针对原版 xz 实现的供应链攻击 [CVE-2024-3094](https://nvd.nist.gov/vuln/detail/CVE-2024-3094) 的影响。
此实现不与原版 xz 实现共享任何文件,并且未经审查不接受任何补丁或 pull request。
该项目的所有安全公告均发布在 [github.com/ulikunitz/xz/security/advisories](https://github.com/ulikunitz/xz/security/advisories?state=published)。
标签:EVTX分析, Golang, xz格式, 压缩解压工具, 安全编程, 数据压缩, 日志审计