蘋果開源了新的無損壓縮算法LZFSE,該算法是去年在iOS 9和OS X 10.10中引入的。按照蘋果公司的說法,LZFE的壓縮增益和ZLib level 5相同,但速度要快2~3倍,能源效率也更高。
LZFSE基于Lempel-Ziv ,并使用了有限狀態(tài)熵編碼,后者基于Jarek Duda在非對稱數(shù)字系統(tǒng)(ANS)方面所做的熵編碼工作。簡單地講,ANS旨在“終結(jié)速度和比率的平衡”,既可以用于精確編碼,又可以用于快速編碼,并且具有數(shù)據(jù)加密功能。使用ANS代替更為傳統(tǒng)的Huffman和算術(shù)編碼方法的壓縮庫越來越多,LZFSE就位列其中。
顯然,LZFSE的目標不是成為最好或最快的算法。事實上,蘋果公司指出,LZ4的壓縮速度比LZFSE快,而LZMA提供了更高的壓縮率,但代價是比Apple SDK提供的其他選項要慢一個數(shù)量級。當(dāng)壓縮率和速度幾乎同等重要,而你又希望降低能源效率時,LZFSE是蘋果推薦的選項。
GitHub上提供了LZFSE的參考實現(xiàn)。在MacOS上構(gòu)建和運行一樣簡單:
$ xcodebuild install DSTROOT=/tmp/lzfse.dst如果希望針對當(dāng)前的iOS設(shè)備構(gòu)建LZFSE,可以執(zhí)行:
xcodebuild -configuration "Release" -arch armv7 install DSTROOT=/tmp/lzfse.dst除了API文檔之外,蘋果去年還提供了一個示例項目,展示如何使用LZFSE 進行塊和流壓縮,這是一個實用的LZFSE入門資源。
LZFSE是在谷歌brotli之后發(fā)布的,后者在去年開源。與LZFSE相比,brotli似乎是針對一個不同的應(yīng)用場景進行了優(yōu)化,比如壓縮靜態(tài)Web資產(chǎn)和Android APK,在這些情況下,壓縮率是最重要的。
查看英文原文:Apple Open-sources its New Compression Algorithm LZFSE