分享
 
 
 

在Java中解读压缩文件

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

近来,我被安排从事一项很重要的工作:把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论坛,就会有拨云见日的感觉。下一个逻辑步骤就是往压缩文件中写数据,在下一篇文章中,我会很兴奋地为大家说明这一问题。

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