分享
 
 
 

利用JAVA API函数实现数据的压缩与解压缩

王朝java/jsp·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

内容:

综述

数据压缩概述

从ZIP文件中解压缩和提取数据

将数据压缩归档入一ZIP文件

ZIP文件属性

求和校验

压缩对象

如何对JAR文件进行操作呢?

结束语

Also in the Java zone:

教学

工具与产品

代码与组件

所有文章

实用技巧

本文通过对数据压缩算法的简要介绍,然后以具体的示例演示了利用java.util.zip包实现数据的压缩与解压,并扩展到在网络传输方面如何应用java.util.zip包现数据压缩与解压

综述

许多信息资料都或多或少的包含一些多余的数据。通常会导致在客户端与服务器之间,应用程序与计算机之间极大的数据传输量。最常见的解决数据存储和信息传送的方法是安装额外的存储设备和扩展现有的通讯能力。这样做是可以的,但无疑会增加组织的运作成本。一种有效的解决数据存储与信息传输的方法是通过更有效率的代码来存储数据。这篇文章简要的介绍了数据的压缩与解压缩,并展示了用java.util.zip包来实现数据的压缩与解压缩是多么的方便与高效。

当然用诸如WinZip,gzip,和Java压缩(或jar)之类的工具也可以实现数据的压缩与解压缩,这些工具都是独立的应用程序。你也可以在JAVA应用程序中调用这些工具,但这并不是最直接的方法,也不是有效的解决方法。尤其是你想更快速地实现数据的压缩与解压缩(例如在传输数据到远程机器之前)。这篇文章包括以下内容:

给出一个关于数据压缩的简单的介绍

描述java.util.zip包

示例如何使用该包实现数据的压缩与解压缩

示例如何压缩串行化的对象并将其存储在磁碟上

示例如何通过数据压缩来增强"客户/服务"应用程序的性能

数据压缩概述

文件中数据冗余的最简单的类型是"字符的复制"。让我们先来看下面一个字符串:

JJJJJJAAAAVVVVAAAAAA

这个字符串可以用更简洁的方式来编码,那就是通过替换每一个重复的字符串为单个的实例字符加上记录重复次数的数字来表示,上面的字符串可以被编码为下面的形式:

6J4A4V6A

在这里,"6J"意味着6个字符J,"4A"意味着4个字符A,以此类推。这种字符串压缩方式称为"行程长度编码"方式,简称RLE。

再举一个例子,考虑一下矩形图像的存储。一个单色位图,可以被存储为下面这种形式,如图1所示。

图1:RLE方式下的位图信息

另外一种方式是将图像存为一个图元文件:

Rectangle 11, 3, 20, 5

上面的表示方法是讲矩形的起始坐标是(11,3),宽度是20,高度是5。

上述的矩形图像可以使用RLE编码方式压缩,通过对相同位记数表示如下:

0, 40

0, 40

0,10 1,20 0,10

0,10 1,1 0,18 1,1 0,10

0,10 1,1 0,18 1,1 0,10

0,10 1,1 0,18 1,1 0,10

0,10 1,20 0,10

0,40

上面第一行是讲图像的第一行由40个0组成。第三行是讲图像的第三行是由10个0加上20个1再加上10个0组成,其它行以此类推。

大家注重,RLE方法需要将其表示的文件与编码文件分开。所以,这种方法不能应用于所有的文件。其它的压缩技术包括变长编码(也被称为哈夫曼编码),还有其它的方法。要想了解更具体的信息,请参考有关数据和图像压缩技术方面的图书,一定会有收获的。

数据压缩有很多益处。不管怎么说,最主要的好处就是减少存储方面的需求。同样的,对于数据通信来讲,压缩数据在媒体中的将导致信息传输数据的提升。数据的压缩能够通过软件在现有的硬件设备上实现或者通过带有压缩技术的非凡的硬件设备来实现。图表2显示了基本的数据压缩结构图。

图2:数据压缩结构图

ZIP VS GZIP

假如你是在Windows系统下工作,你可能会对工具WinZip很熟悉,是用来创建压缩档案和解开压缩档案的。而在UNIX平台上,会有一些不同,命令tar用来创建一个档案文件(并不压缩),其它的程序(gzip或compress)用来创建一个压缩档案。

WinZip和PkZip之类的工具同时扮演着归档和压缩两个角色。他们将文件压缩并将其归档。另一方面,gzip并不将文件归档。所以,在UNIX平台上,命令tar通常用来创建一个档案文件,然后命令gzip来将档案文件压缩。

Java.util.zip包

Java提供了java.util.zip包用来兼容ZIP格式的数据压缩。它提供了一系列的类用来读取,创建,修改ZIP和GZIP格式的文件。它还提供了工具类来计算任意输入流的数目,这可以用来验证输入数据的有效性。该包提供了一个接口,十四个类,和两个异常处理类,如表1所示。

表1: java.util.zip包

条目 类型 描述

Checksum 接口 被类Adler32和CRC32实现的接口

Adler32 类 使用Alder32算法来计算Checksum数目

CheckedInputStream 类 一个输入流,保存着被读取数据的Checksum

CheckedOutputStream 类 一个输出流,保存着被读取数据的Checksum

CRC32 类 使用CRC32算法来计算Checksum数目

Deflater 类 使用ZLIB压缩类,支持通常的压缩方式

DeflaterOutputStream 类 一个输出过滤流,用来压缩Deflater格式数据

GZIPInputStream 类 一个输入过滤流,读取GZIP格式压缩数据

GZIPOutputStream 类 一个输出过滤流,读取GZIP格式压缩数据

Inflater 类 使用ZLIB压缩类,支持通常的解压方式

InlfaterInputStream 类 一个输入过滤流,用来解压Inlfater格式的压缩数据

ZipEntry 类 存储ZIP条目

ZipFile 类 从ZIP文件中读取ZIP条目

ZipInputStream 类 一个输入过滤流,用来读取ZIP格式文件中的文件

ZipOutputStream 类 一个输出过滤流,用来向ZIP格式文件口写入文件

DataFormatException 异常类 抛出一个数据格式错误

ZipException 异常类 抛出一个ZIP文件

注重:ZLIB压缩类最初是作为可移植的网络图像文件格式(PNG)标准的一部分开发的,是不受专利保护的。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有