我的目标是在并行线程中压缩相同来源的数据。我已经定义了一个任务列表,这些任务都有读取信息(每个任务中的数据量为500kb-1MB)。
我的压缩线程将使用ZLIB压缩每个块的数据,并将其存储在相应任务的outbuf中。
现在,我想要合并所有这些数据并创建一个标准的ZLIB格式输出文件。
从ZLIB RFC和浏览pigzee源代码后,我了解到:
ZLIB头如下所示:
+---+---+
|CMF|FLG| (2 bytes)
+---+---+
+---+---+---+---+
| DICTID | (4 bytes. Present only when FLG.FDICT is set)
+---+---+---+---+
+=====================+
|...compressed data...| (variable size of data)
+=====================+
+---+---+---+---+
| ADLER32 | (4 bytes of variable data)
+---+---+---+---+
在我的情况下,同样没有字典。
因此,当我组合两个压缩单元时,所有单元的标头都相同。
因此,我正在执行以下操作。
1. 对于第一个单元,我将编写标头+压缩数据。 2. 对于第二个单元到最后一个单元,我只编写压缩数据(没有标头和尾随部分)。 3. 所有单元完成后,我使用
adlrer32_combine()
并将所有作业输出数据的校验和转换为一个最终的adler 32,然后在底部更新输出文件。但是问题是,在压缩时会出现错误,说某些地方数据无效。
是否已经有人尝试过类似的事情?任何相关信息都将非常有帮助。