我有一些关于java.util.zip
库的一般问题。 我们基本上做的是导入和导出许多小组件。以前这些成分是进口和使用单个大文件,例如:java.util.zip - ZipInputStream v.s. ZipFile
<component-type-a id="1"/>
<component-type-a id="2"/>
<component-type-a id="N"/>
<component-type-b id="1"/>
<component-type-b id="2"/>
<component-type-b id="N"/>
请注意,组件的进口过程中的顺序是相关的出口。
现在每个组件应该占据自己的文件应该是外部版本,QA-ED,BLA BLA。我们决定输出的输出应该是一个zip文件(包含所有这些文件),我们输入的输入应该是一个类似的zip文件。我们不想在我们的系统中爆炸拉链。我们不希望为每个小文件打开单独的流。我目前的问题:
Q1。可能ZipInputStream
保证压缩条目(小文件)的读取顺序与我们使用ZipOutputStream
的导出时插入的顺序相同?我认为阅读是一样的东西:
ZipInputStream zis = new ZipInputStream(new BufferedInputStream(fis));
ZipEntry entry;
while((entry = zis.getNextEntry()) != null)
{
//read from zis until available
}
我知道,中央拉链目录将被置于在zip文件的末尾但尽管如此里面的文件条目具有顺序。我也知道依靠这个命令是一个丑陋的想法,但我只想记住所有的事实。 Q2302。如果我使用ZipFile
(我更喜欢),那么调用getInputStream()
几百次会带来怎样的性能影响?它会比ZipInputStream
解决方案慢吗?该邮编只打开一次,ZipFile
支持RandomAccessFile
- 这是正确的吗? 我假设读数是这样的:
ZipFile zipfile = new ZipFile(argv[0]);
Enumeration e = zipfile.entries();//TODO: assure the order of the entries
while(e.hasMoreElements()) {
entry = (ZipEntry) e.nextElement();
is = zipfile.getInputStream(entry));
}
Q3。是否从相同的ZipFile
线程安全地检索输入流(例如,我可以同时在不同线程中读取不同的条目)?任何表现处罚?
感谢您的回答!
嗨StaxMan!我只是在JDK6中检查ZipFile $ ZipFileInputStream的实现。这是由ZipFile.getInputStream返回它有同步,但我真的不知道这是多么可靠。 – 2011-01-11 18:05:14
是的,我不能肯定地说它是非线程安全的。另一个更危险的部分是底层本地zlib库,我怀疑它不是线程安全的。 – StaxMan 2011-01-11 18:07:35