如何使用 将输出写入压缩文件(gz、bz2、...)fstream
?似乎 Boost 库可以做到这一点,但我正在寻找一个非 Boost 解决方案。我看到的示例仅用于从压缩文件中读取。
问问题
2159 次
2 回答
2
要实现的两个主要部分是编码/压缩和成帧/封装/文件格式。
来自维基百科,DEFLATE 算法:
流格式
Deflate 流由一系列块组成。每个块前面都有一个 3 位标头: 1 位:流中的最后一个块标记:1:这是流中的最后一个块。0:在这之后还有更多的块要处理。2 位:用于此块类型的编码方法: 00:存储/原始/文字部分,长度在 0 到 65,535 字节之间。01:静态霍夫曼压缩块,使用预先约定的霍夫曼树。10:一个完整的压缩块,附带提供的霍夫曼表。11:保留,不要使用。大多数块最终将使用方法 10 进行编码,即动态 Huffman 编码,它会为每个数据块单独定制优化的 Huffman 树。生成必要的霍夫曼树的指令紧跟在块头之后。压缩是通过两个步骤实现的:用指针匹配和替换重复字符串。根据使用频率用新的加权符号替换符号。
来自维基百科,gzip
文件格式:
“gzip”也常用于指代gzip文件格式,即:一个10字节的header,包含一个magic number、一个version number和一个timestamp 可选的额外headers,比如原始文件名,body,包含DEFLATE-compressed payload 一个 8 字节的页脚,包含 CRC-32 校验和和原始未压缩数据的长度
于 2012-11-30T16:22:08.453 回答