BZ2_bzBuffToBuffCompress()可以重复调用吗?

标签 c compression bzip2

我有大量“输入”数据,我想将其压缩到多个 bzip2 流,而不将数据写入多个中间文件。

我可以将一大块输入数据放入缓冲区,使用 BZ2_bzBuffToBuffCompress() 将该缓冲区压缩为 bzip2 风格的字节,并重复后续的 BZ2_bzBuffToBuffCompress()调用新数据,直到我没有更多输入数据为止?

bzip2 documentation说如下:

Compression in this manner is a one-shot event, done with a single call to this function. The resulting compressed data is a complete bzip2 format data stream. There is no mechanism for making additional calls to provide extra input data. If you want that kind of mechanism, use the low-level interface.

这是否意味着我无法在新填充的缓冲区大小的输入数据 block 上重新运行 BZ2_bzBuffToBuffCompress() ?我应该使用 BZ2_bzWrite() 来代替吗?

编辑

我实际上是指输出到一个存档文件,该文件可能包含一个或多个 bzip 流。

最佳答案

您可以继续使用您喜欢的新数据调用 BZ2_bzBuffToBuffCompress() ,您将生成我认为您所说的想要的内容,即:

data that I want to compress to multiple bzip2 streams

这正是您将得到的。多个 bzip2 流。然后,每个流都需要单独解码。

如果您想获取一系列缓冲区并从中创建一个单个 bzip2 流,那么您将需要使用 BZ2_bzCompressInitBZ2_bzCompressBZ2_bzCompressEnd

关于BZ2_bzBuffToBuffCompress()可以重复调用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11816563/

相关文章:

algorithm - 如何构造这个约束满足问题?

java - 在 Hadoop Mapreduce 中使用 gzip 编解码器压缩 reducer 的输出时出错

PHP 在 Php.ini 中启用 bz2 扩展

r - 如何在 R 中检查文件的魔数(Magic Number)(或十六进制签名)?

compression - 为什么 bzip2 的最大块大小是 900k?

c++ - 如何将带有转义字符的 C/C++ 字符串转换为普通(原始)字符串

c++ - 带有 PAGE_GUARD 的 VirtualProtect 不使用局部变量

c - 指向数组的全局指针

C if else 条件

java - java.util.zip.Deflater 和 java.util.zip.Inflater 类线程安全吗