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就成为你的首选了。
-
通过指定一个被读取的ZIP文件,或者是文件名,或者是一个文件对象来创建一个ZipFile对象:
Java代码 :-
ZipFile
zipfile new= ZipFile( "figs.zip");
ZipFile zipfile = new ZipFile("figs.zip");
-
ZipFile
-
使用entries方法,返回一个枚举对象,循环获得文件的ZIP条目对象:
Java代码:- while(e.hasMoreElements())
{ -
entry = (ZipEntry) e.nextElement(); -
read contents and save them - }
while(e.hasMoreElements()) { entry = (ZipEntry) e.nextElement(); // read contents and save them }
- while(e.hasMoreElements())
-
ZIP条目作为参数传递给getInputStream方法,可以读取ZIP文件中指定条目的内容,能过其返回的输入流(InputStram)对象可以方便的读出ZIP条目的内容:
Java代码 :-
is
= newBufferedInputStream(zipfile.getInputStream(entry));
is = new BufferedInputStream(zipfile.getInputStream(entry));
-
is
-
获取ZIP条目的文件名,创建输出流,并保存:
Java代码 :- byte
data[] new= byte[BUFFER]; -
FileOutputStream
fos new= FileOutputStream(entry.getName()); -
dest
= newBufferedOutputStream(fos, BUFFER); - while
((count 0,= is.read(data, BUFFER)) 1)!= - { -
dest.write(data, count); -
}
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); }
- byte
-
最后关闭所有的输入输出流
Java代码 :- dest.flush();
- dest.close();
-
is.close();
- dest.flush();