0

我正在尝试解压缩一块内存,但我不知道它的原始未压缩大小,但是,我确实知道这个原始内存块的最大大小。

有没有办法在不知道原始未压缩大小的情况下用 LZ4 解压?

Short-Story-Long:我正在使用名为 Cereal 的第三方库将一堆变量序列化为字符串流。Cereal 将使用“便携式二进制格式”将您的数据序列化为字符串流,这意味着字节序被保留,如果需要,甚至在反序列化期间转换为主机的字节序。然后使用 LZ4 压缩字符串流并传输到远程机器进行解压缩和反序列化。

我的问题是 LZ4 将输出一个压缩数据的内存块和一个指定压缩数据大小的整数。要解压缩,您需要压缩大小和原始大小,我只是将压缩数据块发送到远程机器。

那么,有没有办法在不知道它的原始压缩大小的情况下用 LZ4 解压缩数据块?本质上是“开始减压,当你用完数据时你就完成了”

4

1 回答 1

1

该函数LZ4_decompress_safe(参见https://github.com/Cyan4973/lz4/blob/master/lib/lz4.c#L1288)似乎只需要最大解压缩大小。在这种情况下,您可以分配一个足够大的缓冲区来解压并使用它。

因此,要么将原始未压缩大小也传输到远程机器。

编辑:在您的情况下,您还可以使用 LZ4 流式解压缩,有关更多信息,请参阅此代码示例

于 2016-07-11T21:13:03.887 回答