哈弗曼的应用

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

压缩过程:

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中的数据写到目标文件中,理论上压缩就成功了

 

你可能感兴趣的:(算法)