gpt4 book ai didi

使用 Zlib 将数据压缩成 block

转载 作者:太空宇宙 更新时间:2023-11-04 04:36:00 25 4
gpt4 key购买 nike

我想用 zlib 压缩一个大于 50mb 的文件。但我希望压缩文件是 block 状的(例如,32Kb block )。

我不想读取 32Kb 的未压缩文件并压缩它。压缩文件应包含 32kb 的压缩 block 。avail_out = 32kb 后应重置压缩。

我只需要用 zlib 来做,这是为了随机访问。

这是我目前所拥有的:

do {
strm.avail_in = fread(in, 1, CHUNK, source);

flush = feof(source) ? Z_FINISH : Z_FULL_FLUSH;
strm.next_in = in;
strm.next_out = out;

strm.avail_out = CHUNK;
deflate(&strm, flush);

if (strm.avail_out == 0)
have = tmp;
else
have = CHUNK - strm.avail_out;

fwrite(out, 1, have, dest);

tmp = strm.avail_out;

if (tmp == 0)
deflateReset(&strm);

} while (flush != Z_FINISH);

但是这段代码有几个问题。

  1. 当我每 32Kb 重置压缩时,我丢失了一些尚未写入的压缩字节,因为 avail_out 已满;如果我尝试编写它们,那么压缩 block 将不再是 32Kb。

  2. 如果我知道在填充 avail_out 时压缩了多少数据,我可以重置文件位置并从那里开始压缩。

最佳答案

无法确保您可以准确填充所需的尺寸,但可以非常接近。参见 fitblk.c了解如何去做。

关于使用 Zlib 将数据压缩成 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30555622/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com