我有一个压缩一堆小数据块的 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 压缩函数以非标准方式编码的标头。