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