我在项目中使用MiniLZO进行一些非常简单的压缩任务。我正在使用一个程序进行压缩,并使用另一个程序进行解压缩。我想知道为解压缩缓冲区分配多少空间。我可以过度分配空间,如果它可以省去我必须用一个整数来注释我的输出文件的麻烦,声明解压缩数据应该占用多少空间。我怎么知道它可能占用多少空间?
经过一番考虑之后,我认为这个问题归结为以下几点: lzo1x压缩的最大压缩率是多少?
答案 0 :(得分:4)
由于你控制压缩器和解压缩器,我建议你用固定大小的块压缩输入。在我的应用程序中,我在每个块中压缩高达64KB,然后发出压缩块的大小和压缩数据本身,因此压缩流实际上看起来像一系列压缩块:
length_of_block_1
block_1
length_of_block_2
block_2
...
解压缩器只读取每个压缩块并将其解压缩到64KB缓冲区,因为我知道块是通过压缩64KB块产生的。
希望有所帮助,
Eric Melski答案 1 :(得分:2)
解压缩数据的最大大小显然与您首先压缩的数据的最大大小相同。
如果您的输入大小有上限,那么我猜您可以使用它,但我不得不说通常的做法是在压缩缓冲区中添加一个标题,指定未压缩的大小。