分享
 
 
 

Java数据压缩格式程序设计方法

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

1、GZIP压缩格式简介

在JDK API中,同样定义了多种类型用于创建和解除GZIP压缩格式数据文件的通用对象和方法,用于基于JDK编写GZIP压缩数据治理程序。

GZIP压缩格式是在Sun Solaris操作系统中广泛采用的压缩数据格式。由于在数据压缩过程中可以采用多种类型的压缩算法,因此,压缩文件的压缩比很高。另外,在创建的压缩文件中,定义了用于表述时间和文件属主的时戳(Time Stamp),可以使文件方便地在网络中传输和交换。

GZIP压缩数据文件由一系列的数字构成,而各数字对应如下描述压缩文件信息的字段:

ID1:缺省值31,用于标识GZIP压缩格式;

ID2:缺省值139,用于标识GZIP压缩格式;

CM:采用的压缩方法,其值为0~7是保留值,8标识采用“deflate”压缩方法;

FLG:用于标识各占用位的标志;

MTIME:记录了最近修改时间;

XFL:用于标识采用压缩算法的选项;

OS:定义了操作系统类型;

XLEN:定义了附加信息段的长度;

COMM:压缩文件说明信息;

CRC32:记录了CRC32算法采用的循环冗余校验值。

上述信息完整描述了GZIP压缩格式数据。当然,基于JDK开发的压缩数据治理程序,不需要明确知道上述压缩数据定义格式,只需要创建相应的治理对象并调用这些对象中定义的方法即可。

2、JDK API中ZIP压缩格式支持对象

GZIP压缩格式是在JDK API中定义支持的另外一种数据压缩格式。由上面介绍的GZIP格式数据压缩方法可知:GZIP压缩格式具有更大的压缩比,因此,在Unix操作系统中,这种类型的数据压缩形式的应用十分普及。

与JDK API对ZIP压缩格式的支持不同,在JDK API中,只定义了GZIPInputStream和GZIPOutputStream两种类型的流(Stream)对象,用于在基于流的数据传输过程中实现数据压缩。这两个对象的继续定义结构如下所示:

Java.lang.Object

+--java.io.InputStream

+--java.io.FilterInputStream

+--java.util.zip.InflaterInputStream

+--java.util.zip.GZIPInputStream(java.util.zip.GZIPOutputStream)

以采用GZIP格式进行数据输入处理GZIPInputStream对象为例,由上述对象的继续定义结构可以看出:该对象继续了InflaterInputStream流对象。需要说明的是:在ZIP压缩包中,定义了Inflater和Deflater两个对象,用于基于ZLIB压缩库实现多种格式的数据压缩和解压缩。因此,InflaterInputStream流对象的作用是采用ZLIB库作为数据压缩治理的引擎,而GZIPInputStream对象则进一步将流的数据加工进行细化,用于读取GZIP格式的压缩数据,同理,GZIPOutputStream对象用于创建GZIP格式的压缩数据文件。下面,将对两个对象的定义内容进行说明:

●GZIPInputStream

对象定义结构:

java.util.zip.GZIPInputStream

静态成员变量:

protected CRC32 crc:用于说明采用的数据压缩算法为CRC-32;

protected boolean eos:说明输入流对象结束读取输入数据;

构造方法:

GZIPInputStream(InputStream in):采用默认的缓冲区字节数创建输入流对象;

GZIPInputStream(InputStream in, int size):创建由整数类型变量size指定缓冲区字节数的输入流对象;

成员方法:

该对象只定义了如下两个成员方法:

void close():关闭输入流对象;

int read(byte[] buf, int off, int len):读取输入流的数据到buf字节数组中。

●GZIPOutputStream

对象定义结构:

java.util.zip.GZIPOutputStream

静态成员变量:

protected CRC32 crc:用于说明采用的数据压缩算法为CRC-32;

构造方法:

GZIPOutputStream(OutputStream out):采用默认的缓冲区字节数创建输出流对象;

GZIPOutputStream(OutputStream out, int size):创建由整数类型变量size指定缓冲区字节数的输出流对象;

成员方法:

void close():关闭输出流对象;

void finish():结束数据输出,但不关闭输出流对象;

void write(byte[] buf, int off, int len):将字节数组buf中的内容压缩输出到输出流对象中。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
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- 王朝網路 版權所有