可以重复调用BZ2_bzBuffToBuffCompress()吗?

时间:2012-08-05 12:49:28

标签: c compression bzip2

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

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

bzip2 documentation说明如下:

  

以这种方式进行压缩是一次性事件,只需一次调用此函数即可完成。得到的压缩数据是完整的bzip2格式数据流。没有用于进行额外调用以提供额外输入数据的机制。如果您需要这种机制,请使用低级接口。

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

修改

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

1 个答案:

答案 0 :(得分:1)

您可以继续使用您想要的新数据拨打BZ2_bzBuffToBuffCompress(),然后您将生成我认为您想要的内容,即:

  

我想要压缩到多个bzip2流的数据

这正是你将得到的。多个bzip2流。然后需要对每个流进行单独解码。

如果您想要使用一系列缓冲区并从中生成单个 bzip2流,那么您需要使用BZ2_bzCompressInitBZ2_bzCompress和{{ 1}}。