转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 站长学院 >> Web开发 >> 正文
文本的无损压缩和还原         ★★★★

文本的无损压缩和还原

作者:闵涛 文章来源:闵涛的学习笔记 点击数:628 更新时间:2009/4/23 11:11:21

文本的无损压缩和还原(lzw 算法实现)

原贴地址:http://www.blueidea.com/bbs/newsdetail.asp?id=1470461&posts=current 

你所需要具备的技术基础:了解 javascript 基本语法。
当然如果学习过 vc vb 或 delphi,可以用这个原理来压缩任何文件,gif 也是基于这个算法
lzw 压缩原理:
为了简化问题,下面用的是伪代码:

1.首先初始化一个“字典”,“字典”里包含了 128 个 ASC II 码。

    var dictionary = new Array;
    for(i = 0; i < 128; i++)
    {
        dictionary[i]=String.fromCharCode(i);
    }

2.不断地在输入文件中寻找在字典中出现的最长的匹配p,并输出其在字典中的位置值到目的文件。若输入文件中下一个字符为c,把pc插入字典。
    
    StringInDictionary = input_first_char();

    while( ! AtEndOfFile )
    {

        if( search_dictionary(StringInDictionary) ) != null)
        {
            CodeInDictionary = search_dictionary(StringInDictionary);

            NextChar = input_next_char();
            StringInDictionary += NextChar;
        }
        else
        {
            Output(CodeInDictionary);
            dictionary[dictionary.length] = StringInDictionary;
            StringInDictionary = NextChar;
        }
    }


    /*在字典里搜索特定字符串*/

    function search_dictionary(str)
    {
        for( i = 0; i < dictionary.length; i ++ )
        {
            if( dictionary[i] == str )
                return i;
        }

        return null;
    }

这样就得到了压缩文件。
可以看出,压缩文件里并没有包含字典,事实上,解压缩时字典是可以根据压缩文件里的内容重建的。
下面我们来看一下解压缩的代码:

    var dictionary = new Array;
    for(i = 0; i < 128; i++)
    {
        dictionary[i] = String.fromCharCode(i);
    }

    previous_code = ReadFirstCode();
    OutPutString = dictionary[previous_code];
    Output(OutPutString);

    while( ! AtEndOfFile )
    {
        current_code = ReadNextCode();
        OutPutString = dictionary[current_code];
        Output(OutPutString);
        dictionary[dictionary.length] = dictionary[previous_code] + OutPutString.substr(0, 1);
        previous_code = current_code;
    }


如果你看懂了上面的伪代码,一定会觉得这十分简单,确实,即使把伪代码改写成真实的代码,并解决其中的一些细节问题,对大多数有一定编程经验的朋友来说,只是工作量的问题而已。如果学习过 vc vb 或 delphi,可以用这个原理来压缩任何文件,gif 也是基于这样的原理,只不过字典初始化时不是存储 ASC II 码,而是 256 种(或更少)预定义的颜色值。对于通用文件压缩,字典初始化时存储一个字节的所有可能的取值(0 到 255)。

实现的例子1:
(用了 fso ,要拷到本地运行的。由于 javascript 不支持二进制流读写,而且字符编码是 unicode 的,所以这个程序只支持 unicode 格式的英文文本文件的压缩和解压。)

运行代码框

[Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]


没有相关教程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Web开发  · 网页制作
    · 平面设计  · 网站运营
    · 网站推广  · 搜索优化
    · 建站心得  · 站长故事
    · 互联动态
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台