• 大小: 2.25MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-11-15
  • 语言: Java
  • 标签: 压缩  解压  

资源简介

资源中有完整的哈夫曼压缩&解压的算法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个文件信息

评论

共有 条评论