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

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

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

核心代码如下:

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;
		}
	}

下面是结果图片:


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

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值