有关LZF算法的相关解析文档比较少,但是Apple对LZF的开源,可以让我们对该算法进行一个简单的解析。LZFSE 基于 Lempel-Ziv ,并使用了有限状态熵编码。LZF采用类似lz77和lzss的混合编码。使用3种“起始标记”来代表每段输出的数据串。
接下来看一下开源的LZF算法的实现源码。
1.定义的全局字段:
private readonly long[] _hashTable = new long[Hsize]; private const uint Hlog = 14; private const uint Hsize = (1 << 14); private const uint MaxLit = (1 << 5); private const uint MaxOff = (1 << 13); private const uint MaxRef = ((1 << 8) + (1 << 3));
2.使用LibLZF算法压缩数据:
/// <summary> /// 使用LibLZF算法压缩数据 /// </summary> /// <param name="input">需要压缩的数据</param> /// <param name="inputLength">要压缩的数据的长度</param> /// <param name="output">引用将包含压缩数据的缓冲区