【探索】JS/Alchemy/C++ 实现Web在线7z解压缩

  几个月前的一个实验项目: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解码方案。尽请期待。 

posted @ 2011-11-12 23:15  EtherDream  阅读(3014)  评论(3编辑  收藏  举报