java.util.zip - ZipInputStream vs ZipFile

У меня есть несколько общих вопросов по библиотеке java.util.zip . Библиотека util.zip. В основном мы занимаемся импортом и экспортом множества мелких компонентов. Ранее эти компоненты были импортированы и экспортированы ...

У меня есть несколько общих вопросов по библиотеке java.util.zip . Библиотека util.zip. В основном мы занимаемся импортом и экспортом множества мелких компонентов. Ранее эти компоненты были импортированы и экспортированы ...

У меня есть несколько общих вопросов по библиотеке 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"/>

Обратите внимание, что порядок компонентов во время импорта имеет значение.

Теперь каждый компонент должен занимать свой собственный файл, который должен быть внешне версионный, QA-ed, bla, bla. Мы решили, что вывод нашего экспорта должен быть 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 ? ZIP-файл открывается только один раз, и 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 потокобезопасным (например, могу ли я одновременно читать разные записи в разных потоках)? Какие-либо штрафы за производительность?

Спасибо за ответы!

8
задан StaxMan 11 January 2011 в 17:58
поделиться