LZ4 解压缩未知大小的二进制内存块

LZ4 Decompress Binary Memory Block Of Unknown Size

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

有没有什么方法可以在不知道原始未压缩大小的情况下用LZ4解压?

短篇-长篇: 我正在使用名为 Cereal 的第三方库将一堆变量序列化为字符串流。 Cereal 将使用 'portable binary format' 将您的数据序列化为字符串流,这意味着字节序将被保留,如果需要,甚至可以在反序列化期间转换为主机的字节序。 然后使用LZ4压缩stringstream并传输到远程机器进行解压和反序列化。

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

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

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

所以要么那样,要么将原始未压缩的大小也传输到远程机器。

编辑:在您的情况下,您还可以使用 LZ4 流式解压缩,有关详细信息,请参阅 this code sample