从iOS的compression_encode_buffer解码LZ4输出

时间:2017-03-13 02:11:07

标签: ios compression lz4

我有一个iOS应用压缩了一大堆小数据。我使用在LZ4模式下运行的compression_encode_buffer来做到这一点,以便它足够快,满足我的需求。

稍后,我获取我制作的文件并在非Apple设备上解码它们。以前我一直在使用他们的ZLIB压缩模式,并且可以使用System.IO.Compression.DeflateStream在C#中成功解码它。

然而,我在LZ4输出中度过了一段时间。基于LZ4文档here,Apple将流分解为一堆块,每个块以4字节幻数,4字节解压缩大小和4字节压缩大小开始。所有这些都是有道理的,我能够将文件解析为其原始的LZ4组块。缓冲区iOS输出中的每个块都解压缩到大约65,635个字节,在我的情况下大约有10个。

但是那时候:我不知道该怎么处理我剩下的LZ4块。我尝试用LZ4net的LZ4.LZ4Stream,LZ4net的LZ4.LZ4Codec解码它们(它管理第一个块,但是当我输入第二个块时失败)。我还尝试了几个C ++库来解码数据。他们每个人似乎都在寻找iOS压缩功能以非标准方式编码的标题。

1 个答案:

答案 0 :(得分: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