java实现哈夫曼文件解压缩

本文深入探讨了哈夫曼压缩算法,详细介绍了其在字符和文件压缩中的应用。文章讲解了哈夫曼树的构建过程,包括字符统计、树的排序与合并,并提供了完整的Java实现代码。此外,还讨论了压缩与解压缩的具体步骤。
  1. 哈夫曼压缩对已经经过压缩处理的文件压缩率比较低,比如ppt和视频。
  2. 这个程序主要涉及到集合、树、IO相关知识。
    字符的统计可以用map集合进行统计。
    哈夫曼树的构建过程也并不复杂:
    ①先对树的集合按照根节点大小进行排序
    ②拿出根节点数值最小的两棵树,用它两构建成一颗新的树;
    ③从集合中删除之前那两颗根节点最小的数;
    ④把新生成的树加入到集合中
    一直循环重复上面的过程,直到集合的大小变成1为止;
    写出、读取文件时注意使用对象流Object流。
  3. 这个程序可以对字符进行压缩,也可以对文件进行压缩。代码中的主函数中只是调用了对文件解压缩的方法,若想对字符进行解压缩,可以调用对应的方法。
  4. 代码如下:
package huffmancode;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class HuffManCode 
{
   
   

	public static void main(String[] args) 
	{
   
   
		String srcFile="d://mydata.txt";//要压缩的文件
		String dstFile="d://mydata.zip";//压缩后的文件
		zipFile(srcFile, dstFile);//压缩文件
		System.out.println("压缩成功!");
		
		unZipFile(dstFile,"d://unzip.txt");//对刚才的文件进行解压,解压后的文件名称叫做unzip.txt
		System.out.println("解压文件成功!");		
	}
	
	public static void unZipFile(String zipFile,String dstFile)
	{
   
   
		InputStream inputStream=null;
		ObjectInputStream objectInputStream=null;
		OutputStream outputStream=null;
		try 
		{
   
   
			inputStream=new FileInputStream(zipFile);
			objectInputStream=new ObjectInputStream(inputStream);
			byte [] array= (byte [])objectInputStream.readObject();
			Map<Byte,String> map=(Map<Byte,String>)objectInputStream.readObject();
			byte[] decode = decode(map, array);
			outputStream=new FileOutputStream(dstFile);
			outputStream.write(decode);
		} catch (Exception e) 
		{
   
   
			System.out.println(e);
		}finally
		{
   
   
			try {
   
   
				outputStream.close();
				objectInputStream.close();
				inputStream.close();
				
			} catch (Exception e2) {
   
   
				System.out.println(e2);
			}
			
		}
		
		
	}
	
	public static void zipFile(String srcFile,String dstFile)
	{
   
   
		FileInputStream inputStream=null;
		OutputStream outputStream=null;
		ObjectOutputStream objectOutputStream
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值