我在一个项目中使用 MiniLZO 来完成一些非常简单的压缩任务。我用一个程序压缩,用另一个程序解压。我想知道要为解压缓冲区分配多少空间。我对过度分配空间很好,如果它可以省去我必须用一个整数注释我的输出文件来声明解压缩数据应该占用多少空间的麻烦。我怎么知道它可能占用多少空间?
经过一番思考,我认为这个问题归结为:lzo1x压缩的最大压缩比是多少?
我在一个项目中使用 MiniLZO 来完成一些非常简单的压缩任务。我用一个程序压缩,用另一个程序解压。我想知道要为解压缓冲区分配多少空间。我对过度分配空间很好,如果它可以省去我必须用一个整数注释我的输出文件来声明解压缩数据应该占用多少空间的麻烦。我怎么知道它可能占用多少空间?
经过一番思考,我认为这个问题归结为:lzo1x压缩的最大压缩比是多少?
由于您同时控制压缩器和解压缩器,因此我建议您将输入压缩为固定大小的块。在我的应用程序中,我在每个块中最多压缩 64KB,然后发出压缩块的大小和压缩数据本身,因此压缩流实际上看起来像一系列压缩块:
length_of_block_1
block_1
length_of_block_2
block_2
...
解压缩器只是读取每个压缩块并将其解压缩到 64KB 缓冲区中,因为我知道该块是通过压缩 64KB 块生成的。
希望有帮助,
埃里克·梅尔斯基
解压缩数据的最大大小显然与您首先压缩的数据的最大大小相同。
如果您的输入大小有上限,那么我想您可以使用它,但我不得不说通常的做法是在您的压缩缓冲区中添加一个标头,以指定未压缩的大小。