哈弗曼的应用:压缩算法(有待修补)
压缩过程:
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中的数据写到目标文件中,理论上压缩就成功了
1358

被折叠的 条评论
为什么被折叠?



