我正在使用LZ4库并在使用以下内容解压缩数据时
int LZ4_decompress_fast_continue (void* LZ4_streamDecode, const char* source, char* dest, int originalSize);
我只需要原始编码n
字节的前N
个字节,其中n < N
。因此,为了提高性能,仅解压缩原始缓冲区的一部分是有意义的。
我想知道我是否可以将n
而不是N
传递给函数的originalSize
参数?
我的初步测试显示,这是不可能的(我的数据解压缩不正确)。虽然可能有办法,例如n
是某个CHUNK_SIZE
的倍数?所有原始N
字节都是通过1次压缩函数调用来压缩的。
答案 0 :(得分:3)
LZ4_decompress_safe_continue()
和LZ4_decompress_fast_continue()
只能解码完整的区块。他们将部分块视为错误,并将其报告为错误。他们还认为,如果没有足够的空间来解压缩整个块,那也是一个错误。
您正在寻找的功能尚不存在。但有一个亲密的堂兄可能会有所帮助。
LZ4_decompress_safe_partial()
可以解码块的一部分。
请注意,与_continue()
变体相比,它仅适用于独立块。
另请注意,压缩块必须完整,并且输出缓冲区必须具有足够的空间来解码整个块。因此,此函数提供的唯一优势是速度:如果您只需要前10个字节,它将在生成足够的字节后立即停止。
&#34;一旦&#34;并不意味着&#34;恰好在10&#34;。它可能要晚得多,在最坏的情况下,它可能是在解码整个块之后。那是因为内部解码引擎仍然是相同的:它解码整个序列,并且没有打破它们。#34;在中间,出于速度考虑。
如果你需要提取少于完整块的字节以节省一些内存,我担心还没有解决方案。将其作为功能请求报告给上游。
答案 1 :(得分:1)
这似乎已在lz4 1.8.3中实现。