LZO解压缩缓冲区大小

3
我正在一个项目中使用 MiniLZO 进行一些简单的压缩任务。我使用一个程序进行压缩,另一个程序进行解压缩。我想知道为解压缩缓冲区分配多少空间。如果能够避免在输出文件中添加一个声明解压缩数据所需空间的整数,我可以适当地多分配一些空间。那么如何确定可能需要多少空间呢?
经过一番思考,我认为这个问题归结为以下问题:lzo1x 压缩的最大压缩比是多少?
2个回答

4

由于您控制压缩器和解压器,建议您将输入分成固定大小的块进行压缩。在我的应用程序中,我每个块压缩高达64KB,然后发出压缩块的大小和压缩数据本身,因此压缩流实际上看起来像一系列压缩块:

length_of_block_1
block_1
length_of_block_2
block_2
...

解压程序只需读取每个压缩块并将其解压缩到一个64KB缓冲区中,因为我知道该块是通过压缩一个64KB块而产生的。
希望这有所帮助,
Eric Melski

这也是一个不错的建议,但它会添加注释——这正是我希望避免的。因此,我可能会将我的数据压缩在一个块中(因为它已经以这种方式存储),并用块大小进行注释。 - Benson
我以为你只想避免在输出中存储解压缩大小。我认为你无法避免存储某种形式的块结束标记,除非你确保输入块始终少于N字节;然后每个压缩流恰好有一个块,因此不需要分隔符。或者你可以扩展解压缩器,返回部分结果和“还有更多要做”的代码,当它填充缓冲区时,这样你就可以重复调用它来解压缩整个输入。 - Eric Melski
所有的建议都很好,但我认为存储解压缩缓冲区的大小会比那更简单。所以,我想我的问题的答案是“克服它并用解压缩大小进行注释”。 - Benson

3

解压后数据的最大大小明显与您首次压缩的数据的最大大小相同。

如果您的输入大小有一个上限,那么我想您可以使用它,但我必须说通常的做法是向压缩缓冲区添加一个标题,指定未压缩大小。


谢谢,我会记住的。可悲的是,我也无法控制最大尺寸。看起来如果我想安全地完成这个任务,我可能需要添加一个头文件。 - Benson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接