哈夫曼压缩源码及两个样例


资源中有完整的哈夫曼压缩&解压的算法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_FablesAesop_Fables.txt
     文件         535  2017-11-23 16:42  哈夫曼压缩&解压源码及样例Aesop_FablesSort.txt
     文件        1003  2017-11-23 16:42  哈夫曼压缩&解压源码及样例Aesop_Fablescode.txt
     文件      190066  2017-11-23 16:43  哈夫曼压缩&解压源码及样例Aesop_Fablesdecode.txt
     文件      108373  2017-11-23 16:42  哈夫曼压缩&解压源码及样例Aesop_Fablesencode.txt
     目录           0  2017-11-23 17:05  哈夫曼压缩&解压源码及样例graph
     文件        6148  2017-11-23 17:05  哈夫曼压缩&解压源码及样例graph.DS_Store
     文件         272  2017-11-23 16:45  哈夫曼压缩&解压源码及样例graphSort.txt
     文件         513  2017-11-23 16:45  哈夫曼压缩&解压源码及样例graphcode.txt
     文件     2094720  2017-11-23 17:05  哈夫曼压缩&解压源码及样例graphdecode.txt
     文件      930330  2017-11-23 17:02  哈夫曼压缩&解压源码及样例graphencode.txt
............此处省略6个文件信息

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)