0

我正在做一个项目,如果我的磁盘出现问题,我会在使用 ZLIB 压缩后将大块内存发送到另一个磁盘。这个转储然后我打算下载并用于进一步调试。这种压缩和上传将一次完成一个块 - 比如说 1024 K。

问题是在我将它上传到另一个磁盘之前,我需要有正好 1024K 的输出块(除此之外还有标题和拖尾,所以这个块大小是压缩数据的大小),然后我可以轻松解压缩它们并使用它。我尝试更改 put_byte 函数,以便一旦输出缓冲区为 1024K,我可以将其发送到另一个磁盘,但这似乎不起作用。

我曾想过检查 Z_BUF_ERROR,然后将其发送过来并重新启动整个压缩过程,但是我不确定是否所有待处理的输入/输出都已刷新。

有没有其他方法可以做到这一点 - 即确保在输出缓冲区(压缩数据大小)正好有 1024K 字节时发送数据包。

4

1 回答 1

0

使用 C++ http://github.com/rudi-cilibrasi/zlibcomplete ZLibComplete 库之类的高级外观库可能会更好。它使用 std::string 并且不需要动态分配,因此您不需要自己管理任何缓冲区,只需放入 std::string 并写出返回的 std::string 您也不需要检查任何返回值或你需要有条件地循环吗?它只是在字符串方面工作:只要你喜欢压缩或解压缩,放入一个字符串,取出一个字符串。对于常见的压缩格式 GZip 和 ZLib,您可以从简短的工作示例程序开始。

于 2015-08-14T06:05:51.137 回答