使用Java API压缩和解压缩数据-Java基础-Java-编程开发

来源:互联网 发布:搜狐新闻软件下载 编辑:程序博客网 时间:2024/06/05 09:12
<script type="text/javascript">google_ad_client = "pub-8800625213955058";/* 336x280, 创建于 07-11-21 */google_ad_slot = "0989131976";google_ad_width = 336;google_ad_height = 280;//</script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>

许多资料来源中都含有多余数据或对存储信息无用的数据。这常常造成客户机 和服务器应用程序间或电脑间浩如烟海的数据传输。很明显,数据存储和信息传 输问题解决办法是,安装辅助存储装置并扩展现有的通信设备。然而,要做到这 一点,就需要增加组织的运行费用。减轻部分数据存储和信息传输的方法之一是, 以更有效的代码表示数据。本文简要介绍数据压缩和解压缩,以及如何有效地、方便地从JavaTM应用程序内部使用 java.util.zip包压缩和解压缩数据。

虽然 WinZip、gzip和Java ARchive(或 jar)等工具可以用来压缩和解压缩数据,这些工具仍被用作独立 的应用程序。从 Java 应用程序中可以调用这些工具,但并非是简捷有效的解决 方法。在希望迅速地(如在传输到远程机器之前)压缩和解压缩数据的情况下, 尤其如此。本文将:

简要综述数据压缩

描述java.util.zip包

介绍如何使用这些包压缩和解压缩数据

介绍如何压缩和解压缩已序列化的对象以节省磁盘空间

介绍如何迅速压缩和解压缩数据,以提高客户/服务器应用程序的性能

概述数据压缩

文件冗余最单一的类型是字符的重复。例如,下列字符串:

BBBBHHDDXXXXKKKKWWZZZZ

可以更简洁地对本字符串进行编码,方法是以重复字符和代表其重复次数的数 字代替每个重复字符串。因此,上述字符串可以编码为:

4B2H2D4X4K2W4Z

这里的" 4B "表示4个B,而2H表示2个H,等等。以这种方法压缩字符串的编码 方式叫做运行长度编码。

另一个例子,是矩形图像存储。因为是单色位图图像,所以按图表1所示存储。

图表1∶带运行长度编码信息的位图

第二种方法是将图像存为图解元文件∶

矩形11、3、20、5

它表示,该矩形起始坐标是(11, 3),宽度是 20 像素,长度是 5 像素。

矩形图像可以通过计算相等字节的方式,以运行长度编码进行压缩,如下:

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组成,诸如此类。

注意,运行长度编码要求对其文件及其编码版本分别表示。所以,本方法不 适用于所有文件。其他的压缩技术包括变长编码(亦称霍夫曼编码)和等其它编 码。更多信息,请参看数据和影象压缩技术的相关书籍。

数据压缩的好处很多。不过,基本的好处是减少存储需求。此外,对于数据 通信,通过介质传递压缩数据会导致信息传输率的增加。注意,数据压缩可以 在现有的硬件上通过软件或采用结合了压缩技术的专门硬件设备完成。图形2显 示了基本的数据压缩方块图。

图形2∶数据压缩方块图

ZIP vs. GZIP

如果使用的是 Windows,就会很熟悉 WinZip 工具,该工具用来创建压缩文 件和从压缩文件中提取文件。不过,在UNIX上,细节有些有点不一样。tar 命令 用来创建文件(非压缩),而另一个程序(gzip或压缩)用来压缩 文件。

WinZip和PKZIP之类的工具既用作归档器,也用 作压缩器。它们将文件压缩并存储在文档中。另一方面,gzip并不 存档文件。因此,在 UNIX 上,tar命令通常用来创建文档,然后 用gzip命令来压缩存档文件。

java.util.zip 包

Java 为兼容 zip 的数据压缩提供 java.util.zip包。它提供 允许读取、创建并修改ZIP和GZIP文件格式的类。此外,提供用于计算任意输入流 校验和的应用类,该类可用于确认输入数据。这个包有一个界面、14个类和2个异 常类,如表1所示。

表 1∶java.util.zip 包

项目 类型 描述

Checksum 界面 由Adler32和CRC32类实现

Adler32 类 用于计算数据流的 Adler32 检验和

CheckedInputStream 类 维持正在读取的数据检验和的输入流。

CheckedOutputStream 类 维持写入数据的检验和的输出流。

CRC32 类 用于计算数据流的 CRC32 检验和

Deflater 类 支持使用 ZLIB 压缩库的常规压缩

DeflaterOutputStream 类 以紧缩压缩格式压缩数据的输出流过滤器

GZIPInputStream 类 文件格式压缩数据的输入流过滤器。

GZIPOutputStream 类 文件格式压缩数据的输出流过滤器。

Inflater 类 支持使用 ZLIB 压缩库的常规解压缩

InlfaterInputStream 类 解压紧缩压缩格式数据的输入流过滤器

ZipEntry 类 代表ZIP压缩文件条目

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

ZipInputStream 类 读取ZIP文件格式文件的输入流过滤器

ZipOutputStream 类 以ZIP文件格式写入文件的输出流过滤器

DataFormatException 异常类 给出数据格式错误的信号

ZipException 异常类 给出 zip 错误的信号

注意: TZLIB压缩库最初是作为“可移植的网络图象文件格式”(PNG) 标准的一部分进行开发的,该标准不受专利的保护。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 国通石油储油卡怎么办 买大棚房受骗了怎么办 朋友做安利天天来我门面怎么办 安利优惠顾客卡怎么办 苹果手机天气温度不显示怎么办? 安利净水器坏了怎么办 安利净水器滤芯盖搭配坏怎么办 安利会员卡过期了怎么办 婴儿吃了润唇膏怎么办? 用错沐浴露洗头怎么办 雅蜜润肤沐浴露怎么办 自煮小火锅水放少了怎么办 安利皇后锅发黑怎么办 宝宝灌肠后不拉屎怎么办 吃蛋白质粉肚子长胖了怎么办 安利产品过期了怎么办 拼多多拼不到人怎么办 被海南大宗骗了怎么办 手机被游戏扣钱怎么办 做酵素剩下的水果怎么办 喝了酵素胃疼怎么办 海科融通不到账怎么办 美团外卖没生意怎么办 淘宝联盟领券销售怎么办 微信返利被骗了怎么办 众筹失败后资金怎么办 健身房不给退卡怎么办 婆婆陷入民间传销组织怎么办 被三生公司骗了怎么办? ppt保存成了图片怎么办 苹果6速度变慢了怎么办 苹果6s速度很慢怎么办 微信支付上限了怎么办 佳享健康骗老人怎么办 宝宝吃了硅胶乳贴怎么办 用完卫生巾后阴部有些不舒服怎么办 指甲上有荧光剂怎么办 小孩吃了荧光剂怎么办 毛巾上有荧光剂怎么办 用过劣质面膜后怎么办 液体硅胶奶嘴煮完有味怎么办