我正在做一个项目,在这个项目中,如果我的磁盘出现问题,我会在使用ZLIB压缩后将内存块发送到另一个磁盘。然后我计划下载这个转储文件并用于进一步的调试。这种压缩和上传是一次完成一个块-比方说1024K。
问题是,在我上传到另一个磁盘之前,我需要有恰好1024K的输出块(除此之外,还有头部和尾部,所以这个块的大小就是压缩数据的大小),这样我就可以很容易地解压缩它们并使用它。我尝试更改put_byte函数,以便一旦输出缓冲区为1024K,我就可以将其发送到另一个磁盘,但这似乎不起作用。
我想检查Z_BUF_ERROR,然后发送它,然后重新启动整个压缩过程,但是我不能确定是否所有挂起的输入/输出都被刷新了。
有没有其他方法可以做到这一点-例如,确保当输出缓冲区(压缩数据大小)正好有1024K字节时发送数据包。
发布于 2015-08-14 14:05:51
也许您会更幸运地使用更高级别的门面库,比如C++ http://github.com/rudi-cilibrasi/zlibcomplete ZLibComplete库。它使用std::string并且不需要动态分配,所以你不需要自己管理任何缓冲区,只需放入std::string并写出返回的std::string,你也不需要检查任何返回值,也不需要有条件地循环。它只是在字符串方面工作:放入一个字符串,取出一个字符串,只要你喜欢压缩或解压。对于GZip和ZLib这两种常见的压缩格式,您都可以从简短的工作示例程序开始。
https://stackoverflow.com/questions/12551219
复制相似问题