幾個月前的一個實驗項目:Web線上解碼7z壓縮。不過最新各種新技術不斷湧現,過不了多久這個估計又要OUT了,所以拿出來分享下。
測試:http://www.etherdream.com/LZMA/HTML/Demo.html
自從劃時代的Alchemy出現,讓我原本鄙視的Flash到了至高無上。我們可以把C/C++編譯成AVM2虛擬機器指令,在Flash中運行,而Flash有著如此高的裝有率,終於使我們有機會在Web裡實現高密集的運算,從而擺脫as和js低效。作為元老級的C和C++,幾乎每種經典的演算法都以它為原版發布,然後移植到其他各種語言。
7z壓縮的核心演算法叫做LZMA。比傳統的zip及rar,壓縮率都要高。他是一個開源項目,通過Alchemy,我們輕而易舉編譯出自己的解碼器。然後即可在Web中實現LZMA解碼了。
lzma外掛程式需要2個檔案:lzma.js和lzma.swf。後者即為解碼器。
在引入LZMA.js後,需等到解碼器就緒才可以使用,就是lzma.swf載入成功。通過setListener指定ready事件,才可以載入壓縮檔。相關調用參考Demo。
調用$LZMA.load(url, charset)方法,下載指定的壓縮包並解碼。其中charset可以指定文字檔的字元編碼,例如utf-8,gb2312等等。如果是二進位檔案的話,指定charset為base64,返回的就是經過base64編碼的文本。
當然,本例中使用的.z格式檔案,並非傳統的7z格式文檔,而是自己實現的一種很簡易的格式,用來儲存壓縮包基本的幾個參數。你想嘗試下將自己的檔案壓縮成.z格式,下載LZMA壓縮程式。裡面附帶了C源碼。在cmd下調用:lzma.exe file 即可壓縮。預設為最高壓縮比,需要600M的空閑記憶體。
不久前Flash11發布了,其中支援用LZMA壓縮SWF檔案。在未來Flash11流行後,我們可以利用內建的功能實現一個更高效的LZMA解碼方案。盡請期待。