Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 估算通缩的方法';s(zlib)当前压缩大小,无刷新_C_Compression_Zlib_Deflate - Fatal编程技术网

C 估算通缩的方法';s(zlib)当前压缩大小,无刷新

C 估算通缩的方法';s(zlib)当前压缩大小,无刷新,c,compression,zlib,deflate,C,Compression,Zlib,Deflate,我目前正在编写一个程序,它接受缓存线(64字节,但可调),并尝试将尽可能多的缓存线放入512字节的块中(同样可调) 问题是,我需要能够得到至少一个粗略的估计,当前压缩大小后,每次调用,以泄气没有冲洗。每个字节对我来说都很重要,刷新会根据数据增加非常显著的开销,特别是考虑到我使用的小数据块大小。我已经尝试了各种不同的Z_SYNC_FLUSH和Z_PARTIAL_FLUSH实现,但这两种实现都会增加很多开销,以便始终有用 我目前最简单的方法是压缩9条缓存线(576字节)并检查它是否适合512块,如果

我目前正在编写一个程序,它接受缓存线(64字节,但可调),并尝试将尽可能多的缓存线放入512字节的块中(同样可调)

问题是,我需要能够得到至少一个粗略的估计,当前压缩大小后,每次调用,以泄气没有冲洗。每个字节对我来说都很重要,刷新会根据数据增加非常显著的开销,特别是考虑到我使用的小数据块大小。我已经尝试了各种不同的Z_SYNC_FLUSH和Z_PARTIAL_FLUSH实现,但这两种实现都会增加很多开销,以便始终有用

我目前最简单的方法是压缩9条缓存线(576字节)并检查它是否适合512块,如果适合,添加另一条缓存线并重新压缩整个缓冲区,依此类推。如果前9个缓存线无法放入512块,则其存储的缓存线将未压缩(原始缓存线未压缩)

可以想象,这种方法需要很长时间,使用这种方法压缩一个7gb的文件需要将近3个小时

我注意到z_stream结构有一个我可以公开的内部状态,但是我没有找到任何明显的方法来利用它来获得估计。我认为这是因为在刷新之前,实际上不会发生压缩

在实际刷新之前,是否需要获得压缩输出的估计大小? 如果没有,我能做些什么来减少当前方法的时间开销吗?

请看一个方法。它的开销大约是三倍,因为它每个块进行三次压缩

基本思想是首先压缩到足够的程度,以填充所需的块。然后解压,直到处理适合所需块的压缩数据量,然后仅压缩该数据量。第二次传球可以改善配合。

看一下其中一种方法。它的开销大约是三倍,因为它每个块进行三次压缩


基本思想是首先压缩到足够的程度,以填充所需的块。然后解压,直到处理适合所需块的压缩数据量,然后仅压缩该数据量。第二次试穿可以改善贴合感。

我真的很感激这一点,看起来我可以稍微修改一下,以完全符合我的需要。再次感谢!我真的很感激这一点,看起来我将能够修改这一点,以满足我的需要完美。再次感谢!