哈弗曼的应用

哈弗曼的应用:压缩算法(有待修补)

压缩过程:

1.从文件中读取字节到字节数组byte[]中

 2.计算出每个字节b在字节数组中出现的次数k,并将b,k存到哈希表map中,代码如下:

private Map getMap(byte[] b) {
		Map map = new HashMap();

		for (int i = 0; i < b.length; i++) {

			if (!map.containsKey(b[i])) {
				map.put(b[i], 1);
			} else {

				Integer k = (Integer) map.get(b[i]);
				k++;
				map.put(b[i], k);
			}
		}
		return map;

	}

 

3.根据压缩算法(略)得到每个字节所对应的编码,并将它们存入另一个哈希表mapCode中,将哈希表写到压缩的目的文件中去

4.创建一个线程从源文件中读取字节,利用mapCode将其转化成对应的编码,将编码整合后存入字节数组中,再以八位一组转化成字存入对列list中去,部分代码如下:

	public void run() {

		byte b;
		try {
			FileInputStream fis=new RaWStream().getIn();
			while ((b = (byte) fis.read())!=-1) {
				
				String str = (String) mapCode.get(b);
				synchronized (list) {
					list.add(str);// 队列list为仓库队列
					list.notifyAll();// 唤醒所有线程,解除锁定
				}
			}	
			System.out.println("读取文件成功----ReadThread.java");
			fis.close();
		} catch (IOException e) {
			System.out.println("输入流获取失败----fis传入失败");
			e.printStackTrace();
		}

	}

 5.再创建一个线程将对列list中的数据传到另一对列list1中去

 6.将对列list1中的数据写到目标文件中,理论上压缩就成功了

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值