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