不久前,我发现需要一台PNG装载机用于我的一个小项目。作为一个完整的工具,我当然决定自己写一个 - 毕竟,为什么在还有车轮等待重新发明时为自己省力?如果你愿意的话,可以在这里查看inflater代码的来源 - 它写得非常干净。事实上,我专门写它是为了易于阅读,而不是最快的实现。
我当时对Deflate了解不多。我知道它基于LZ系列算法(LZ77 / L7SS等)。我听说有人说它只是“只是”LZSS,除了他们在匹配向量上应用霍夫曼编码。嗯,事实证明这是真的。均田。但是当我更深入地阅读规范时,它让我觉得这里发生了一些非常聪明的事情,我之前没有看到过任何明确提出过的事情。所以我想为什么不试着在这里解释Deflate的本质。我不打算在严格的细节上涵盖整个工作;如果你想要那就去阅读规范。