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格式, 压缩解压工具, 安全编程, 数据压缩, 日志审计