ios - 从 iOS 的 Compression_encode_buffer 解码 LZ4 输出

标签 ios compression lz4

我有一个 iOS 应用程序,可以压缩一堆小数据 block 。我使用在 LZ4 模式下运行的 compression_encode_buffer 来执行此操作,这样它的速度足以满足我的需求。

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

但是,我对 LZ4 输出感到很不舒服。基于LZ4文档here ,Apple 将流分成一堆 block ,每个 block 以 4 字节魔数(Magic Number)、4 字节解压缩大小和 4 字节压缩大小开头。所有这些都是有道理的,我能够将文件解析为其组成的原始 LZ4 block 。 iOS 输出缓冲区中的每个 block 解压缩为大约 65,635 字节,在我的例子中大约有 10 个。

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

最佳答案

回答我自己的问题: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

关于ios - 从 iOS 的 Compression_encode_buffer 解码 LZ4 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42755614/

相关文章:

java - 将 Zip 转换为存储压缩

java - 使用 java 的高效 LZ4 多文件压缩

使用 xCode 5.1.1 进行 iOS 编程

javascript - Tomcat不压缩js文件

assembly - punpcklbw(在 MMX/SSE/AVX 中交错)的用例有哪些?

c - 为什么使用 lz4 lib 解压数据失败,但使用 unlz4 却可以正常工作?

ios - UIStoryboardSegue 与 presentviewcontroller?

ios - Lottie:无法获取带名称的动画

ios - 带索引的 UITableView 部分