繁体   English   中英

使用fstream写入gz

[英]writing to gz using fstream

如何使用fstream将输出写入压缩文件(gz,bz2,...)? Boost库似乎可以做到这一点,但是我正在寻找一种非Boost解决方案。 我看到了仅用于从压缩文件读取的示例。

要将压缩的数据写入文件,您可以通过zlib (对于DEFLATE,用于.zip和.gz文件的压缩算法)或xz utils (对于LZMA,与7zip一起使用的压缩算法)等压缩库来运行未压缩的数据。和.xz文件),然后照常使用ofstreamfwrite写入结果。

要实现的两个主要部分是编码/压缩成帧/封装/文件格式

从Wikipedia中,DEFLATE算法:

流格式

Deflate流由一系列块组成。 每个块之前都有一个3位标题:1位:流中最后一个块标记:1:这是流中的最后一个块。 0:在此之后,还有更多的块要处理。 2位:用于此块类型的编码方法:00:存储/原始/文字部分,长度在0到65,535字节之间。 01:使用预先约定的霍夫曼树的静态霍夫曼压缩块。 10:提供了霍夫曼表的压缩块。 11:保留,请勿使用 大多数块最终将使用方法10(动态霍夫曼编码)进行编码,该方法会为每个数据块分别定制一个优化的霍夫曼树。 生成必要的霍夫曼树的指令紧随块头之后。 压缩是通过两个步骤实现的:使用指针匹配和替换重复的字符串。 根据使用频率,用新的加权符号替换符号。

在Wikipedia中, gzip文件格式为:

“ gzip”通常也用于指代gzip文件格式,即:10字节的标头,包含一个魔术数字,一个版本号和一个时间戳可选的额外标头,例如原始文件名,主体,包含DEFLATE压缩的有效负载,为8字节的页脚,其中包含CRC-32校验和以及原始未压缩数据的长度

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM