【发布时间】:2012-09-23 09:37:29
【问题描述】:
我正在做一个项目,如果我的磁盘出现问题,我会在使用 ZLIB 压缩后将大块内存发送到另一个磁盘。这个转储然后我打算下载并用于进一步调试。这种压缩和上传将一次完成一个块 - 比如说 1024 K。
问题是我需要有正好 1024K 的输出块,然后我才能将它上传到另一个磁盘(除此之外还有标题和拖尾,所以这个块大小是压缩数据的大小),然后我可以轻松解压并使用它。我尝试更改 put_byte 函数,以便一旦输出缓冲区为 1024K,我可以将其发送到另一个磁盘,但这似乎不起作用。
我曾想过检查 Z_BUF_ERROR,然后将其发送过来并重新启动整个压缩过程,但我不确定是否所有待处理的输入/输出都已刷新。
我还有其他方法可以做到这一点 - 即确保在输出缓冲区(压缩数据大小)正好有 1024K 字节时发送数据包。
【问题讨论】:
-
O/P 或 OP => 存储压缩数据的输出缓冲区 IP 或 I/P => 存储原始数据的输入缓冲区。
-
如果您只是想将
deflate()的输出分解为1K 块,那么只需为deflate()提供1K 的输出,即strm.avail.out = 1024;。向deflate()提供输入,直到strm.avail.out == 0或您的输入用完。然后写出那个块。 -
@MarkAdler:嗨,马克,我对 ZLIB 库中的 put_byte 进行了以下更改:- 每当一个字符被复制到挂起的缓冲区中时,我都会将其复制到大小为 63K 的输出缓冲区中(这是不同于 next_out 指向的缓冲区)。我也在 flush_pending() 中进行了必要的更改。问题是当我对压缩数据运行充气时,我收到以下错误:-“无效或不完整的放气数据”。我没有更改窗口大小。仍然为什么我会出现这个错误??
-
没有代码我不知道你在做什么。
标签: c compression zlib