【探索】JS/Alchemy/C++ 實現Web線上7z解壓縮

來源:互聯網
上載者:User

  幾個月前的一個實驗項目: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解碼方案。盡請期待。 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.