zlib raw deflate / inflate输出不匹配

时间:2011-12-07 02:39:06

标签: c zlib

我使用这个例子:http://zlib.net/zpipe.c几乎是字面上的,只有几个改动,因为我想使用原始deflate:

deflateInit() - > deflateInit2(&strm, 8, Z_DEFLATED, -15,MAX_MEM_LEVEL, Z_DEFAULT_STRATEGY); inflateInit() - > inflateInit2(&strm, -15);

来源和目标是放气:

FILE* source = fopen("test.txt", "r+");
FILE* dest = fopen("output", "w+");

并且膨胀:

 FILE* src = fopen("output", "r+");
 FILE* dst = fopen("test2.txt", "w+");

我压缩了一个601.7kb的文本文件,然后我将其解压缩,但是在膨胀的文件中缺少大约8kb。怎么会这样?

2 个答案:

答案 0 :(得分:1)

将raw与zlib一起使用是很流的。我上个月深入探讨了这个问题。循环终止条件变得非常奇怪(流上的EOF与完全膨胀)。 zlib(似乎)希望流末尾的校验和强制最后一个块出来,这对于未包装的数据不会发生。如果你一次给整个块充气(这也是我需要的),它可以正常工作,但我永远无法用多块循环可靠地工作。它也因数据而异。我有一些终止调整,可以正确终止一些数据而不是其他数据。

答案 1 :(得分:1)

这是什么平台?您可能需要在fopen()调用中指定二进制文件。例如。 “wb +”,“rb +”。丢失字节与总数75的比率使我认为这是文本的平均行长度,而fread()的文本转换可能会丢弃换行符。