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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/jjfly999/article/details/50917486

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

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

核心代码如下:

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------>preStr
		zero = 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;
		}
	}

下面是结果图片:


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

展开阅读全文

没有更多推荐了,返回首页