Go 语言 压缩与归档


计算机算法中 有以空间换时间的做法
而无损压缩算法 以压缩 或 解压缩数据花费的时间来 换取 存储空间
压缩 减少网络传输的数据量 进而减少网络传输的时间


Go 标准库实现了 压缩标准 zlib 和 gzip
提供了 GNU zip 库 bzip2 用于读写 bzip2 格式
且提供了接口可以透明地读写压缩文件 除此之外
标准库还提供了 DEFLATE 压缩算法的实现 gzip 和 zlib
可以读取基于 DEFLATE 的文件格式


标准库提供 LZW 压缩算法(串表压缩算法)的实现
该算法常用的文件格式 GIF 和 PDF
另外 TIFF 文件格式使用和该算法类似 但和目前 LZW 算法版本不兼容


包管理归档(archive)格式
将多个文件合并到一个文件 从而将其作为一个单元管理 archive/tar
读写 UNIX 磁带归档格式 这是一种老标准
但由于其灵活性 当前仍得到广泛使用 archive/zip 根据 zip 格式来处理归档
这种格式因 PC 程序 PKZIP 得以普及 原先在 MS-DOS 和 Windows 下使用
不过由于其 API 的简单性以及这种格式的可移植性  现在也用于其他平台


DEFLATE 是同时使用了哈夫曼编码(Huffman Coding)与 LZ77 算法的一个无损数据压缩算法
是一种压缩数据流的算法 任何需要流式压缩的地方都可以用
目前 zip 压缩文件默认使用的就是该算法
算法的原理 以及 哈夫曼编码(Huffman Coding)与 LZ77 算法
推荐 GZIP压缩原理分析


flate - DEFLATE 压缩算法
compress/zlib   gnu zlib 压缩
compress/gzip   读写 gnu zip 文件
compress/bzip2  bzip2 压缩
archive/tar     tar归档访问
archive/zip     zip归档访问