资源简介
资源中有完整的哈夫曼压缩&解压的算法java实现,并且包括两个运行实例。
代码片段和文件信息
package huffman;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Compress {
/* 字符串转int*/
public static int changeStringToInt(String s){
int v1 = (s.charAt(0) - 48)*128;
int v2 = (s.charAt(1) - 48)*64;
int v3 = (s.charAt(2) - 48)*32;
int v4 = (s.charAt(3) - 48)*16;
int v5 = (s.charAt(4) - 48)*8;
int v6 = (s.charAt(5) - 48)*4;
int v7 = (s.charAt(6) - 48)*2;
int v8 = (s.charAt(7) - 48)*1;
return v1 + v2 + v3 + v4 + v5 + v6 + v7 + v8;
}
/* 按字符出现的频率降序排序*/
public static List> Sort(Map map)
{
List> list_Data = new ArrayList> (map.entrySet());
Collections.sort(list_Data new Comparator>()
{
public int compare(Map.Entry o1 Map.Entry o2)
{
if(o2.getValue() != null && o1.getValue() != null && o2.getValue().compareTo(o1.getValue()) > 0){
return -1;
}else{
return 1;
}
}
});
return list_Data;
}
/* 统计字符频率*/
public static Map Statistic(StringBuffer s)
{
Map map = new HashMap();
for(int i = 0; i < s.length(); i++)
{
String perStr = s.substring(i i+1);
if(map.containsKey(perStr)){
Integer num = map.get(perStr);
map.put(perStr num + 1);
}else{
map.put(perStr 1);
}
}
return map;
}
/* 压缩文件*/
public static void CompressFile(String rfileString wfile String codefile String charFrequency)
{
StringBuffer s = new StringBuffer();
BufferedReader br;
try {
br = new BufferedReader(new FileReader(rfile));
int ss = -1;
try {
while(-1 != (ss = br.read())){
s.append((char)ss);
}
br.close();
Map map=Statistic(s);
/* 按字符出现的频率降序排序*/
List> data = Sort(map);
/*构建哈夫曼树,获取不同字符的编码*/
Huffman haffman=new Huffman();
Map result = haffman.GetCode(data);
/*对源文件字符进行编码转换*/
StringBuffer charcode = new StringBuffer();
for(int i = 0; i < s.length(); i++)
{
String perStr = s.substring(i i+1);
charcode.append(result.get(perStr));
}
File f = new File(codefile);
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2017-12-09 20:58 __MACOSX\
目录 0 2017-12-09 20:58 __MACOSX\哈夫曼压缩&解压源码及样例\
文件 120 2017-12-09 20:57 __MACOSX\哈夫曼压缩&解压源码及样例\._.DS_Store
目录 0 2017-12-09 20:58 __MACOSX\哈夫曼压缩&解压源码及样例\Aesop_Fables\
文件 120 2017-11-23 16:43 __MACOSX\哈夫曼压缩&解压源码及样例\Aesop_Fables\._.DS_Store
文件 709 2017-11-15 10:53 __MACOSX\哈夫曼压缩&解压源码及样例\Aesop_Fables\._Aesop_Fables.txt
文件 176 2017-11-23 16:42 __MACOSX\哈夫曼压缩&解压源码及样例\Aesop_Fables\._Sort.txt
文件 176 2017-11-23 16:42 __MACOSX\哈夫曼压缩&解压源码及样例\Aesop_Fables\._code.txt
文件 176 2017-11-23 16:43 __MACOSX\哈夫曼压缩&解压源码及样例\Aesop_Fables\._decode.txt
目录 0 2017-12-09 20:58 __MACOSX\哈夫曼压缩&解压源码及样例\graph\
文件 120 2017-11-23 17:05 __MACOSX\哈夫曼压缩&解压源码及样例\graph\._.DS_Store
文件 176 2017-11-23 16:45 __MACOSX\哈夫曼压缩&解压源码及样例\graph\._Sort.txt
文件 176 2017-11-23 16:45 __MACOSX\哈夫曼压缩&解压源码及样例\graph\._code.txt
文件 176 2017-11-23 17:05 __MACOSX\哈夫曼压缩&解压源码及样例\graph\._decode.txt
文件 176 2017-11-23 17:02 __MACOSX\哈夫曼压缩&解压源码及样例\graph\._encode.txt
文件 619 2017-11-15 10:53 __MACOSX\哈夫曼压缩&解压源码及样例\graph\._graph.txt
目录 0 2017-12-09 20:57 哈夫曼压缩&解压源码及样例\
文件 10244 2017-12-09 20:57 哈夫曼压缩&解压源码及样例\.DS_Store
目录 0 2017-11-23 16:44 哈夫曼压缩&解压源码及样例\Aesop_Fables\
文件 6148 2017-11-23 16:43 哈夫曼压缩&解压源码及样例\Aesop_Fables\.DS_Store
文件 190066 2017-11-15 10:53 哈夫曼压缩&解压源码及样例\Aesop_Fables\Aesop_Fables.txt
文件 535 2017-11-23 16:42 哈夫曼压缩&解压源码及样例\Aesop_Fables\Sort.txt
文件 1003 2017-11-23 16:42 哈夫曼压缩&解压源码及样例\Aesop_Fables\code.txt
文件 190066 2017-11-23 16:43 哈夫曼压缩&解压源码及样例\Aesop_Fables\decode.txt
文件 108373 2017-11-23 16:42 哈夫曼压缩&解压源码及样例\Aesop_Fables\encode.txt
目录 0 2017-11-23 17:05 哈夫曼压缩&解压源码及样例\graph\
文件 6148 2017-11-23 17:05 哈夫曼压缩&解压源码及样例\graph\.DS_Store
文件 272 2017-11-23 16:45 哈夫曼压缩&解压源码及样例\graph\Sort.txt
文件 513 2017-11-23 16:45 哈夫曼压缩&解压源码及样例\graph\code.txt
文件 2094720 2017-11-23 17:05 哈夫曼压缩&解压源码及样例\graph\decode.txt
文件 930330 2017-11-23 17:02 哈夫曼压缩&解压源码及样例\graph\encode.txt
............此处省略6个文件信息
- 上一篇:javaweb网上书店系统源码
- 下一篇:echart 连接mysql
相关资源
- JAVA类小游戏集合压缩包
- oracle驱动jar包后解压缩即可
- android计算器源码压缩包
- java实现Ftp批量文件及解压
- android开发ADT压缩包
- Java文件上传并自动解压
- indexer-cli-5.1.1.jar-maven 索引解压工具
- JAVA 上传ZIPRAR文件并解压
- Androidzip压缩文件并解压
- Huffman 压缩解压缩 Java实现
- java 大文件视频分片上传+压缩
- Tomcat7.0压缩包
- Javaweb网上订餐系统 压缩.zip
- Android 开发环境-Eclipse版解压版附带
- Android高效压缩图片不失真的方法总结
- Android中zip解压漏洞分析
- android图片选择包含图片查看删除选择
- 哈夫曼编码压缩程序Java
- Android模拟器躲避的检测与应对 解压密
- apache-tomcat-8.5.24
- 7z解压缩java代码+工具
- tomcat5.5解压版
- java大文件快速压缩zip.rar
- ROM开发工具箱4.0测试版
- Apache-cxf 2.2.8压缩包
- 精简版jre1.8wins 64位,附压缩教程
- fuse-2.7.4.tar.gz 解压即可使用
- eclipse android开发 解压使用
- java源码-进销存财务一体化解压密码:
- 百度及腾讯活体验证视频压缩工具及
评论
共有 条评论