加载中…
个人资料
elly
elly
  • 博客等级:
  • 博客积分:0
  • 博客访问:1,335
  • 关注人气:10
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Java重ZipInputStream与ZipFile区别

(2011-05-26 14:22:54)
标签:

高速缓冲

条目

文件名

文档

随机文件

it

分类: Java开发相关

类ZipInputStream读出ZIP文件序列(简单地说就是读出这个ZIP文件压缩了多少文件),而类ZipFile使用内嵌的随机文件访问机制读出其中的文件内容,所以不必顺序的读出ZIP压缩文件序列。
  
ZipInputStream和ZipFile之间另外一个基本的不同点在于高速缓冲的使用方面。当文件使用ZipInputStream和FileInputStream流读出的时候,ZIP条目不使用高速缓冲。然而,如果使用ZipFile(文件名)来打开文件,它将使用内嵌的高速缓冲,所以如果ZipFile(文件名)被重复调用的话,文件只被打开一次。缓冲值在第二次打开时使用。如果你工作在UNIX系统下,这是什么作用都没有的,因为使用ZipFile打开的所有ZIP文件都在内存中存在映射,所以使用ZipFile的性能优于ZipInputStream。然而,如果同一ZIP文件的内容在程序执行期间经常改变,或是重载的话,使用ZipInputStream就成为你的首选了。

    下面显示了使用类ZipFile来解压一个ZIP文件的过程:

  1. 通过指定一个被读取的ZIP文件,或者是文件名,或者是一个文件对象来创建一个ZipFile对象:

    Java代码 :
    1. ZipFile zipfile new ZipFile("figs.zip");   
    ZipFile zipfile = new ZipFile("figs.zip"); 
    
  2. 使用entries方法,返回一个枚举对象,循环获得文件的ZIP条目对象:

    Java代码:
    1. while(e.hasMoreElements())    
    2.     entry (ZipEntry) e.nextElement();    
    3.     // read contents and save them    
    4.  
    while(e.hasMoreElements()) { 
        entry = (ZipEntry) e.nextElement(); 
        // read contents and save them 
    }
    
  3. ZIP条目作为参数传递给getInputStream方法,可以读取ZIP文件中指定条目的内容,能过其返回的输入流(InputStram)对象可以方便的读出ZIP条目的内容:

    Java代码 :
    1. is new BufferedInputStream(zipfile.getInputStream(entry));   
    is = new BufferedInputStream(zipfile.getInputStream(entry)); 
    
  4. 获取ZIP条目的文件名,创建输出流,并保存:

    Java代码 :
    1. byte data[] new byte[BUFFER];    
    2. FileOutputStream fos new FileOutputStream(entry.getName());    
    3. dest new BufferedOutputStream(fos, BUFFER);    
    4. while ((count is.read(data, 0BUFFER)) != -1   
    5.     dest.write(data, 0count);    
    6.   
    byte data[] = new byte[BUFFER]; 
    FileOutputStream fos = new FileOutputStream(entry.getName()); 
    dest = new BufferedOutputStream(fos, BUFFER); 
    while ((count = is.read(data, 0, BUFFER)) != -1) { 
        dest.write(data, 0, count); 
    } 
    
  5. 最后关闭所有的输入输出流

    Java代码 :
    1. dest.flush();    
    2. dest.close();    
    3. is.close();   
       
      

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有