我有一些关于java.util.zip
图书馆。
我们基本上做的是进口和出口许多小部件。以前这些组件是使用单个大文件导入和导出的,例如:
<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"/>
请注意,导入期间组件的顺序是相关的。
现在每个组件都应该占用自己的文件,该文件应该是外在地版本控制、质量检查、等等。我们决定导出的输出应该是一个 zip 文件(包含所有这些文件),导入的输入应该是一个类似的 zip 文件。我们不想破坏我们系统中的拉链。我们不想为每个小文件打开单独的流。我目前的问题:
Q1.愿ZipInputStream
确保 zip 条目(小文件)将按照我们使用的导出插入的顺序读取ZipOutputStream
?我认为阅读是这样的:
ZipInputStream zis = new ZipInputStream(new BufferedInputStream(fis));
ZipEntry entry;
while((entry = zis.getNextEntry()) != null)
{
//read from zis until available
}
我知道中央 zip 目录位于 zip 文件的末尾,但其中的文件条目仍然按顺序排列。我也知道依赖顺序是一个丑陋的想法,但我只想牢记所有事实。
Q2。如果我使用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
线程安全(例如,我可以同时读取不同线程中的不同条目)吗?有任何性能处罚吗?
感谢您的回答!