网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.Apache Geronimo 1.0&.
.多附件、带有预览功能的HTML页面.
.实现游戏开发中的屏幕滚动功能.
.使用JavaServer Pages技术生成动.
.iBatis框架batch处理优化.
.我了解的javaIDE浅析.
.spring 2.0 的事务自动处理.
.Eclipse编辑国际化资源文件插件.
.JavaMail发送附件的例子.
.提取英文中的单词.
.运算符优先级.
.让你知道:java 文件的缩进排版.
.实例解析:设计一个完全可扩展的应.
.Java设计模式之外观模式研究.
.Java 和 XML 为何将成功.
.Java究竟是什么?.
.教你如何使用javax.sound.midi包.
.除岁迎新 Java 2005回顾&2006展望.
.在 WebSphere AS 中使用 Web 服务.
.如何测定JDBC的性能(下).

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

发表日期:2008-1-5



  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中的内容压缩输出到输出流对象中。
上一篇:如何计算java对象占用的内存 人气:1469
下一篇:关于java中的对象序列化 人气:1701
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐