哈夫曼算法解压最终版(解压成功)

来源:互联网 发布:淘宝模板的作用 编辑:程序博客网 时间:2024/06/05 16:50

今天晚上左哥给我们讲解了前天的测试题目后,我又用剩余的时间把哈夫曼解压算法最终版完成了,期间遇到了一个码表补零的小问题,所以出了错误,但是最后还是发现问题,解决了。

哈夫曼解压文件就是:把压缩文件提取码表各个编码的长度,然后对应后面的编码串,把哈夫曼编码串读入解压程序,然后压缩文件再转化成字符串,再对应码表一一解码,最终就可以得到解压后的文件了。

核心代码如下:

public void reCom(FileInputStream fis)throws Exception{FileOutputStream fos = new FileOutputStream("C:\\Users\\asus\\Desktop\\new.txt");String str = "";int value ;int zero;//读取压缩文本的内容,value用来接收读取的整形数据,str用来存储压缩文本转化后的01字符串,zero用来处理末尾补零的字符串while(fis.available()!=0){value = fis.read();str = str + IntToString(value);zero = value;}//26   10110011 11100000 00000100//00011010 10110011 11100000 00000100------>str//00011010 10110011------>preStrzero = StringToInt(str.substring(str.length()-8,str.length()));String preStr = new String();preStr = str.substring(0, str.length()-8-zero);System.out.println(preStr);//preStr为压缩文件的哈夫曼编码,只要按照码表解码就可解压文件int count = 0;String strNew = new String();int last = preStr.length();//解压文件,处理01字符串,对应码表翻译,以下是解码for(int i=0;i<last;i++){strNew = strNew + preStr.substring(0, 1);preStr = preStr.substring(1);System.out.println(i+" "+strNew);while(count<256){//如果字符串匹配上了,就写到解压文件上if(strNew.equals(codestr[count])){strNew = "";fos.write(count);count = 0;break;}else{count++;}}count = 0;}}

下面是结果图片:


快十点了,也该走了。回去洗洗睡了再见

2 0