网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
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,移动开发
本月文章推荐
.第1个简单java程序.
.Java GUI误解 因为外观而拒绝Swi.
.Hashtable简易数据库程序.
.java学习日记(线程).
.父类和子类转换(子类对象赋值给父.
.谈模式(SingletonPattern)的变形.
.Java嵌入式开发之五.
.关于游戏中高效的换色方法.
.Java在软件开发中可能出现的几个.
.技术分享 如何实现基于J2EE的服务.
.Struts 用户指南(一).
.small 方法.
.使用异步Servlet扩展AJAX应用程序.
.Struts网站导航系统设计新思路探.
.javazip_src_0.8alpha源代码发布.
.Microsoft JScript 特性 - 非-EC.
.教你一简单办法用Java获得IP地址.
.J2EE开发购物网站解析(1).
.java基础知识:KVM的常量池.
.将 Java 应用程序迁移到 .NET(2).

在Java中解读压缩文件

发表日期:2008-1-5



近来,我被安排从事一项很重要的工作:把Web日志放入SQL数据库中进行分析,不巧的是,这些日志文件是GZIP格式,每一次请求信息都被加密,需要解析。我一直认为Java是做好的程序语言,所以我决定编一个程序来解析这些日志文件。

我一直担心解析加密文件的解压缩过程,所以我决定察看一下J2SDK 1.3.1 API文档,看看是否有帮助,在Java.util压缩包的右侧列表中正好有Java.util.jar和Java.util.zip package,本文中我主要谈谈解读压缩文件并轻松演示一下。

Java.util.zip压缩包
Java.util.zip压缩包对读写ZIP和GZIP格式文件提供了分类,从这些格式中读取文件就需要创建合适的 InflaterInputStream,先以GZIP格式为例。

GZIPInputStream可以以InputStream (象FileInputStream)为例,在我的例子中,我想要读取一个文件中的一行这样我就要用StringTokenizer解析每一个entry,为了达到这一目的,我采用在代码下创建BufferedReader的方法。(见表A中的所有源代码)

gzipReader = new BufferedReader(new InputStreamReader(new GZIPInputStream(new FileInputStream(fileName))));

这行代码可以让我们同时在一行中读取整个文件,看一下下面的结果:

C:〉java Zip test.txt.gz
contents of test.txt.gz...
line of this test file that is compressed.
line of this test file that is compressed.
line of this test file that is compressed.
line of this test file that is compressed.
line of this test file that is compressed.
line of this test file that is compressed.
line of this test file that is compressed.
line of this test file that is compressed.
line of this test file that is compressed.
line of this test file that is compressed.

这是GZIP格式的文件,ZIP文件是一个小陷阱,因为你可以包含一个或更多的文件,ZipFile类可以简化一个文件的重复情况,ZipFile object可以由File object或说明文件名和路径的String来创建。ZipFile可以提供大量的ZipEntry objects,从中,可以得到文件的一些值(比如文件大小、压缩比例等等)。ZipFile和ZipEntry结合使用, 可以得到GZIPInputStream来读取整个目录内容见表B。

也可以采用同样的方式读取上面提到的GZIP文件。

Java.util.jar压缩包
Java.util.jar压缩包对读写JAR (Java 文档)格式文件提供了分类,这是基于ZIP文件的标准格式,压缩包中的大多数类都扩展了Java.util.zip压缩包的副本。从JAR文件中读信息与从ZIP中读信息非常相似,JarFile类与ZipFile类功能相同。(实际上是演变过来的)

JarFile具体的清单,见表A,创建了JarFile的同时也就生成了具体的清单目录,之后,每一个entry都按与前面例子中ZIP文件相同的方式来读取信息(究竟他们都是ZIP文件),你可能会注重到代码中包含检查entry是否是一个目录的语句,这一方法在ZipEntry类中也有,在创建并读取InflaterInputStream之前核实一些entry是否是目录路径。

节省时间和空间
解析加密需要一定的过程,从InflatorInputStream中读取信息可以节省时间和磁盘空间。我要处理的文件是非常大的(30 MB压缩, 150 MB未压缩)。直接读取压缩文件,那么在读之前就没有时间来解压缩,同时磁盘也没有足够的空间了。首先,假如文档非常小,应用API是很困难的,但是搜索一下Java论坛,就会有拨云见日的感觉。下一个逻辑步骤就是往压缩文件中写数据,在下一篇文章中,我会很兴奋地为大家说明这一问题。
上一篇:在Java中实现浮点数的精确计算 人气:585
下一篇:在Java中对标准流进行重定向 人气:747
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐