2

我有一个压缩一堆小数据块的 iOS 应用程序。我使用在 LZ4 模式下运行的 compression_encode_buffer 来执行此操作,以便它足够快以满足我的需要。

后来,我拿了我制作的文件并在非 Apple 设备上对其进行解码。以前我一直在使用他们的 ZLIB 压缩模式,并且可以使用 System.IO.Compression.DeflateStream 在 C# 中成功对其进行解码。

但是,我对 LZ4 的输出玩得很开心。根据此处的 LZ4 文档,Apple 将流分成一堆块,每个块都以 4 字节幻数、4 字节解压缩大小和 4 字节压缩大小开始。所有这些都是有道理的,我能够将文件解析为其组成的 raw-LZ4 块。iOS 输出缓冲区中的每个块都解压缩到大约 65,635 个字节,在我的例子中大约有 10 个。

但是后来:我不知道如何处理剩下的 LZ4 块。我尝试使用 LZ4net 的 LZ4.LZ4Stream、LZ4net 的 LZ4.LZ4Codec 对它们进行解码(它管理第一个块,但是当我输入第二个块时失败)。我还尝试了几个 C++ 库来解码数据。他们每个人似乎都在寻找 iOS 压缩函数以非标准方式编码的标头。

4

1 回答 1

2

回答我自己的问题:Apple 的 LZ4 解压缩器(进行必要的修改以处理其原始存储格式)在这里:https ://opensource.apple.com/source/xnu/xnu-3789.21.4/osfmk/vm/lz4.c.auto .html

事后编辑:我实际上无法让它工作,但我没有花太多时间在它上面,因为我找到了 Apple 的 LZFSE 解压缩器。

LZFSE 解压器可以在这里找到:https ://github.com/lzfse/lzfse

于 2017-03-13T02:12:27.230 回答