java实现文本和文件的压缩和解压缩

Java:利用哈夫曼树实现对文本文件的压缩与解压 使用信息论中的Huffman coding原理,结合java实现对于文本文件的压缩和解压。 阅读详情
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;

public class GzipUtil {
	public static final int BUFFER = 1024;
	public static final String EXT = ".gz";

	//测试
	public static void main(String[] args) throws Exception {
		String str = "测试压缩";
		byte[] bytes = str.getBytes("UTF-8");
		if(bytes.length>10240){
			//如果大于10k压缩
		}
		byte[] compress = GzipUtil.compress(bytes);
		byte[] decompress = GzipUtil.decompress(compress);
		System.out.println(new String(decompress,"UTF-8"));
		GzipUtil.compress("d:/1.txt",false);
	}
	
	//压缩
	public static byte[] compress(byte[] data) {
		byte[] output = null;
		try {
			ByteArrayInputStream bais = new ByteArrayInputStream(data);
			ByteArrayOutputStream baos = new ByteArrayOutputStream();
			// 压缩
			compress(bais, baos);
			output = baos.toByteArray();

			baos.flush();
			baos.close();

			bais.close();
		} catch (Exception e) {
		}
		return output;
	}

	//压缩文件
	public static void compress(File file) throws Exception {
		compress(file, true);
	}

	//压缩文件,是否删除压缩前文件
	public static void compress(File file, boolean delete) throws Exception {
		FileInputStream fis = new FileInputStream(file);
		FileOutputStream fos = new FileOutputStream(file.getPath() + EXT);

		compress(fis, fos);

		fis.close();
		fos.flush();
		fos.close();

		if (delete) {
			boolean fal = file.delete();
		}
	}

	public static void compress(InputStream is, OutputStream os)
			throws Exception {

		GZIPOutputStream gos = new GZIPOutputStream(os);

		int count;
		byte data[] = new byte[BUFFER];
		while ((count = is.read(data, 0, BUFFER)) != -1) {
			gos.write(data, 0, count);
		}

		gos.finish();

		gos.flush();
		gos.close();
	}

	public static void compress(String path) throws Exception {
		compress(path, true);
	}

	//根据文件路径压缩文件
	public static void compress(String path, boolean delete) throws Exception {
		File file = new File(path);
		compress(file, delete);
	}

	//解压缩
	public static byte[] decompress(byte[] data) throws Exception {
		ByteArrayInputStream bais = new ByteArrayInputStream(data);
		ByteArrayOutputStream baos = new ByteArrayOutputStream();

		// 解压缩

		decompress(bais, baos);

		data = baos.toByteArray();

		baos.flush();
		baos.close();

		bais.close();

		return data;
	}

	public static void decompress(InputStream is, OutputStream os)
			throws Exception {
		GZIPInputStream gis = new GZIPInputStream(is);
		int count;
		byte data[] = new byte[BUFFER];
		while ((count = gis.read(data, 0, BUFFER)) != -1) {
			os.write(data, 0, count);
		}

		gis.close();
	}
}

利用huffman编码对文本文件进行压缩与解压 Java exe4j的使用教程可以看这篇博客:https://blog.youkuaiyun.com/jinny_0019/article/details/80065452 目录 一、问题描述 二、要求 三、提示 四、运行环境 五、运行过程说明 *六、算法设计 七、数据结构设计 八、算法伪代码 九、代码 十、测试文件 十一、测试结果截图 一、问题描述 利用huffman编码对文本文件进行压缩... 阅读详情

相关推荐

压缩TTF文件

有时项目中的字体文件太大消耗资源,项目中只用到有限的几个字,本文件可通过输入要保留的字来进行文件缩减。

java中压缩文件(超实用)

java中压缩文件: 记录一个压缩文件的文章,希望能帮到大家直接就是一个工具类,可以直接用大家可以复制后先在main里面调用试试看!老样子直接上代码。 public class ZipCompressor { static final int BUFFER = 8192; private File zipFile; /** * 压缩器构造函数 * * @param pathName 压缩包路径<br> e.g /Users/Admin/

Spring丶王不正-传记 809

Basler相机和pylon viewer 的使用

文章目录1 线路连接2 安装和使用pylon 1 线路连接 电源线接到电源插座,网线接到电脑(电脑没有网口的话,可用转换器转到type-c接口)。 2 安装和使用pylon 参考 Basler pylon安装及对网口相机基本设置 相机和电脑以太网IP设置参考:balser相机IP设置 关于相机参数和pylon viewer的详细设置,可以参考pylon Viewer安装路径下的文档(Documentation) ...

Deephome的博客 1万+

java文本压缩算法_java 什么算法压缩文件最小

展开全部有三种方式实现java压缩:1、jdk自带的包java.util.zip.ZipOutputStream,不足之处,文件(夹)名称32313133353236313431303231363533e59b9ee7ad9431333363393666带中文时,出现乱码问题,实现代码如下:/*** 功能:把 sourceDir 目录下的所有文件进行 zip 格式的压缩,保存为指定 zip 文件*...

weixin_42525005的博客 762

BLDC方波控制 vs. FOC:技术选型指南与未来演进

本文深入对比BLDC电机方波控制与FOC技术的核心差异,分析两者在成本、性能和应用场景上的权衡。方波控制凭借低成本和易实现性,在电动工具和家电领域优势明显;而FOC则以平滑高效控制见长,适用于高端精密应用。文章为工程师提供了实用的技术选型指南,并展望了未来技术融合的发展趋势。

yhn4567890的博客 1171

实战演练:用wvp-GB28181-pro + ZLMediaKit搭建一个可用的国标视频监控测试环境(附设备模拟器对接)

本文详细介绍了如何使用wvp-GB28181-pro和ZLMediaKit在Ubuntu系统上搭建GB28181视频监控测试环境。从环境准备、组件解析到核心服务部署与设备模拟器对接,提供完整的实战指南,帮助开发者快速构建可验证的监控系统。

weixin_42692935的博客 579

【Java】文本数据的Gzip压缩

在Java中,可以使用Gzip压缩算法对数据进行压缩和解压缩。Gzip算法是一种常见的无损压缩算法,可以将数据压缩为较小的字节数,从而节省网络带宽和存储空间等资源。

微信公众号: 后端码匠 3083

可信数据空间关键技术和功能架构研究

可信数据空间(TDS)是实现数据安全共享的基础设施,通过数字合约和使用控制技术确保数据跨域流通的可信与安全。其架构包括服务平台和接入连接器,关键技术涵盖访问控制、隐私计算、区块链等。评估重点在于合规性、连接器能力、互联互通及安全体系。核心在于构建规则引擎而非简单数据汇聚,连接器开发比平台建设更重要。当前面临技术成本博弈、跨域身份互认等挑战,需平衡安全、性能与成本,推动数据要素市场发展。

逸尘的专栏 2222

(二)实现文本压缩_java

通过for循环在dataStr中遍历数组,统计每个字符出现的频率,因为哈希表中是<String,Integer>类型的,dataStr.charAt(i)是每个字符,所以要将char字符类型转换为String字符串类型,才能存储到哈希表中。2.根据给定的字符串内容(读取文本文件),统计每个字符出现的频率,创建对应的节点。将字符编码写入到新文件当中,判断编码位数,如果编码不足8位,向后用0补全8位。将字符数据替换成相应编码,通过取出表中对应字符来返回编码。最后合并方法就能够实现文本压缩功能。

weixin_74447094的博客 501

SAP 基于生产订单行项目外部加工创建采购申请时的一个增强需求

摘要 本文介绍在SAP系统中实现生产订单外协工序自动生成采购申请(PR)时,将指定文本写入PR抬头文本的技术方案。关键点包括: 业务背景:通过CO02事务码将工序标记为外部加工,系统自动生成PR,需在生成时自动写入抬头文本。 技术难点: PR抬头文本存储在STXH/STXL而非EBAN表 标准增强点ME_PROCESS_REQ_CUST在外协场景可能不触发 推荐方案: 使用BAdI ME_REQ_POSTED,在PR过账时点执行 通过Text Object EBANH和Text ID(如B01)写入文本 实

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 622

用Java实现Huffman编码进行文本文件压缩和解压缩,要求如下。 ①采用散列/树映射,统计文本文件中字符使用频率,以字符为单位进行编码。 ②指定字符集合和权值集合创建一棵Huffman树,获...

实现步骤如下: 统计文本文件中字符的使用频率,可以使用散列或树映射的方法。 使用字符集合和对应的权值集合创建一棵Huffman树。 获取每个字符的Huffman编码,并用多个二进制位表示一个Huffman编码。 对文本文件进行压缩,用Huffman编码对文件中的字符进行编码。 解压缩,对二进制位文件进行译码,使用Huffman编码对其进行译码,从而获得原文件。 ...

weixin_35756373的博客 258

[SoC]SoC验证中bootcode与firmware相关验证经验总结

本文总结了SoC验证中bootcode和firmware的验证经验。重点介绍了两种数据加载方法:1)使用Verilog系统函数$readmemh/$readmemb直接写入ROM/ARAM,需注意文件路径、格式和斜杠方向;2)通过Memory Hierarchy在initial块中操作,需要添加适当延时并注意路径拼接。文章还提供了在testcase phase中先读取数据到HASH再写入SRAM的示例,并强调加载后需使能edc_bypass以避免ECC错误。验证过程中需特别注意文件位置、格式要求及路径处理等

元直的博客 2497

Huffman编码实现文本文件压缩

压缩过程 压缩过程用了五个方法进行实现,下面依次沿着五个方法介绍下思路以及关键的实现点。 1.读取文件,计算文本中字符出现的权重 我们知道Huffman树的叶子节点是代表权重的,叶子节点的权重越大,那该叶子节点离根节点的距离就越短,对应的字符出现的频率就会越高,这样就能实现压缩。因此实现压缩的第一步要用输入流读取文本文件,并计算出不同字符出现的比例。 IO读取文本文件: 方法有很多,可以用字符流,字节流或者用缓冲流一行一行读...

m0_59619576的博客 1542

为JETSON TX2开发板部署YoloV5

参考资料一:nvidia为JETSON Tx2编译的pytorch 参考资料二:Jetson软件包下载 参考资料三:Tx2安装工具的使用 参考资料四: Jetson烧录工具 参考资料五: B站下载的行人视频 一、升级TX2系统版本到最新版(JetPack4.6) 我拿到的板子的版本太低了,在工作的过程中会有很多问题,因此要先升级到最新版 下载参考资料四中的烧录工具,在Ubuntu18.04中安装,只能,必须,一定是Ubuntu18.04 安装完成后使用非root用户启动SDK Manger,登录Nvi.

贱贱的剑 5887

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

huffman图像压缩 java_Huffman 压缩解压缩 Java实现

【实例简介】使用Java 语言实现了Huffman编码的压缩和解压缩,能够实现对Ascii 文档的压缩和解压缩,目前尚不支持对二进制文档进行压缩【实例截图】【核心代码】HuffmanCoding└── HuffmanCoding├── Readme.txt├── 可执行文件及测试用例│ ├── 1.dehuffman│ ├── 1.huffman│ ├── 1.txt│ ├── 2...

weixin_39797393的博客 231

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Java利用最优二叉树实现哈夫曼编码对文本的压缩和解压

什么是哈夫曼编码 哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式,哈夫曼编码是可变字长编码(VLC)的一种。Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码,一般就叫做Huffman编码(有时也称为霍夫曼编码) 为什么哈夫曼编码能够实现文件的压缩 如果我们使用的定长编码方例如ASCII码,8-bit定长编码,使用8位(一个字节)代表一个字符,就会出现很多的byte出现了相同,所以我们考虑一种新的编码方式

Gdhnnfd的博客 699

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Java实现赫夫曼编码、解码、文件压缩和解压

11.3 赫夫曼编码 11.3.1 基本介绍 赫夫曼编码也翻译为 哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式, 属于一种程序算法。 赫夫曼编码是赫哈夫曼树在电讯通信中的经典的应用之一。 赫夫曼编码广泛地用于数据文件压缩。其压缩率通常在 20%~90%之间 赫夫曼码是可变字长编码(VLC)的一种。Huffman 于 1952 年提出一种编码方法,称之为最佳编码 11.3.2 原理刨析 通信领域中信息的处理方式-----赫夫曼编码 步骤如下: 传输的字符串 i like li

当一个合格的软件工程师 3868

如何写压缩软件,运用哈夫曼算法实现

到文件压缩大家很容易想到的就是rar,zip等我们常见的压缩格式。然而,还有一种就是大家在学习数据结构最常见到的哈夫曼树的数据结构,以前还不知道他又什么用,其实他最大的用途就是用来做压缩,也是一些rar,zip压缩的祖先,称为哈弗曼压缩(什么你不知道谁是哈弗曼,也不知道哈弗曼压缩,不急等下介绍)。   随着网络与多媒体技术的兴起,人们需要存储和传输的数据越来越多,数据量越来越大,以前带宽有限的

tsdl2009的专栏 6179

android zip压缩base64解密加密

import android.util.Base64; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream;

月十二 1009

赫夫曼树应用-文件解压缩

一需求 对上一篇博客用赫夫曼编码压缩的文件进行解压缩,恢复成原来的文件。 二思路 1 压缩文件中包括数据和赫夫曼编码表。 2读取压缩文件。 3 完成解码。 三代码 package com.atguigu.huffmancode; import java.io.*; import java.util.*; /** * @className: HuffmanCode * @description: 赫夫曼编码 * @date: 2021/3/21 * @author: 贝医 */ p...

实践求真知 243

计算机论文压缩,文件压缩与解压缩实践_计算机专业论文范文

文件压缩与解压缩实践_计算机专业论文范文发布时间:2015-01-18来源:人大经济论坛计算机专业论文范文摘 要随着人们对数据的大量需求以及计算机使用时间的增加,计算机磁盘上的文件越来越大,越来越多。如何让有限的磁盘空间容纳更多的数据成为需要解决的问题。一方面,高速发展的存储技术以提高磁盘容量来解决这样的需求,但随着网络环境下数据传递的产生以及带宽的限制,大容量数据问题日益突出。在这两种需求的推动...

weixin_39901077的博客 304

哈夫曼树以及文件压缩的实现

链接: 我觉得一个不错的文章:https://blog.youkuaiyun.com/weixin_44634197/article/details/109077445?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161650116416780262524679%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=16165011

天上有好多星星 136

Java基础(IO输入输出流,读写文件操作,对象序列化)

IO 输入输出流基本概念 输入流:信息从程序空间之外的地方流入程序空间里面 输出流:信息从程序空间里面流到程序空间之外的地方 输入输出流的分类 从流的方法划分 输入流 输入流 从流的分工划分 节点流:访问文件进行输入输出操作的流 处理流:在节点流的基础之上对信息进行加工转换处理的流 从流的内容划分 面向字符的流:专门处理字符数据 面向字节的流:用于一般目的即输入输出 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xmKCMN7t-159212429

jump_into_zehe的博客 662

Java JDK 1.6自带神技!一行代码搞定文件压缩,流量省疯了

在各类网络通信产品中,为提升传输效率并减少流量消耗,通常会在发送端对文件进行压缩处理,接收端再予以解压,尤其适用于文本类文件,压缩效果显著。那么在Java语言中,如何实现这一过程?

2603_96171993的博客 374

使用Gzip进行简单压缩操作

public class GZIPcompress{  public static void main(string[] args ){    throws IOExecption       if (args.length ==0){     System .out.println( "Usage : \nGZIPcompress file\n" + " tUses GZIP compr...

android_bird_bird的博客 670
上一篇: 将java项目转为web项目,配置web项目的文件夹
下一篇: xstream学习,对象和xml之间转换,对象和json之间转换
fight_zhi
博客等级 码龄14年 27粉丝 66原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值