dsnet/compress
GitHub: dsnet/compress
纯 Go 实现的流行压缩算法库集合,提供 Brotli、BZip2、DEFLATE、XFLATE 等格式的高性能编解码能力。
Stars: 417 | Forks: 27
# Go 压缩库合集
[](https://godoc.org/github.com/dsnet/compress)
[](https://travis-ci.org/dsnet/compress)
[](https://goreportcard.com/report/github.com/dsnet/compress)
## 简介
**注意:本库正在积极开发中。因此,不对 API 的稳定性提供任何保证。作者保留出于任何原因随意破坏 API 的权利。**
本仓库托管了一系列与压缩相关的库。该项目的目标是为 Go 标准库之外的流行压缩算法提供纯 Go 实现。这些包的目标如下:
* 可维护性:代码保持良好的文档、完善的测试、可读性、易于维护,并且易于验证其是否符合所实现格式的规范。
* 高性能:能够以至少 C 语言实现 80% 的速率进行压缩和解压缩。
* 灵活性:代码提供对压缩流的底层和细粒度控制,类似于 C API 所提供的功能。
在这三个目标中,第一个目标通常与其他两个目标相冲突,并带来了有趣的挑战。通过混淆抽象层或使用非直观的底层原语通常可以实现更高的性能。此外,更多的特性和功能虽然在某些情况下很有用,但往往会使 API 复杂化。因此,这个包将尝试满足所有目标,但在性能或灵活性优势不够显著时,将优先考虑可维护性。
## 库状态
对于可用的包,目前仅实现了部分功能:
| Package | Reader | Writer |
| ------- | :----: | :----: |
| brotli | :white_check_mark: | |
| bzip2 | :white_check_mark: | :white_check_mark: |
| flate | :white_check_mark: | |
| xflate | :white_check_mark: | :white_check_mark: |
这个库正在积极开发中。因此,不对 API 的稳定性提供任何保证。作者保留出于任何原因随意破坏 API 的权利。当库变得更加成熟时,计划最终遵循某种严格的版本控制方案,例如[语义化版本控制](http://semver.org/)。
然而,同时,这个库确实提供了一些基本的 API 保证。对于下面定义的类型,保证方法签名不会改变。请注意,作者仍保留更改每个 ```Reader``` 和 ```Writer``` 结构体中字段的权利。
```
type ReaderConfig struct { ... }
type Reader struct { ... }
func NewReader(io.Reader, *ReaderConfig) (*Reader, error) { ... }
func (*Reader) Read([]byte) (int, error) { ... }
func (*Reader) Close() error { ... }
type WriterConfig struct { ... }
type Writer struct { ... }
func NewWriter(io.Writer, *WriterConfig) (*Writer, error) { ... }
func (*Writer) Write([]byte) (int, error) { ... }
func (*Writer) Close() error { ... }
```
要查看还有哪些剩余工作,请参阅[任务列表](https://github.com/dsnet/compress/wiki/Task-List)。
## 性能
请参阅[性能指标](https://github.com/dsnet/compress/wiki/Performance-Metrics)。
## 常见问题解答
请参阅[常见问题解答](https://github.com/dsnet/compress/wiki/Frequently-Asked-Questions)。
## 安装
运行以下命令:
```go get -u github.com/dsnet/compress```
构建本库需要 `Go1.9` 或更高版本。
## 包
| Package | 描述 |
| :------ | :---------- |
| [brotli](http://godoc.org/github.com/dsnet/compress/brotli) | brotli 包实现了 RFC 7932 中描述的 Brotli 格式。 |
| [bzip2](http://godoc.org/github.com/dsnet/compress/bzip2) | bzip2 包实现了 BZip2 压缩数据格式。 |
| [flate](http://godoc.org/github.com/dsnet/compress/flate) | flate 包实现了 RFC 1951 中描述的 DEFLATE 格式。 |
| [xflate](http://godoc.org/github.com/dsnet/compress/xflate) | xflate 包实现了 XFLATE 格式,这是 DEFLATE 的随机访问扩展。 |
标签:EVTX分析, Go, Ruby工具, SOC Prime, 压缩库, 开发工具, 日志审计, 算法