Распаковка ZIP-файла в памяти на Java [закрыто]

Я загружаю заархивированные файлы, содержащие XML, и я хотел бы избежать записи zip-файлов на диск, прежде чем манипулировать ими из-за требований к задержке. Тем не мение,java.util.zip мне не достаточно. Нет никакого способа сказать «здесь» байтовый массив zip-файла, используйте его & quot; не превращая его в поток, иZipInputStream не является надежным, поскольку он сканирует заголовки записей (см. обсуждение «РЕДАКТИРОВАТЬ» ниже по причинам, почему это не надежно).

У меня пока нет доступа к zip-файлам, которые я буду обрабатывать, поэтому я не знаю, смогу ли я обработать их черезZipInputStreamи мне нужно найти решение, которое будет работать с любыми действительными ZIP-файлами, поскольку штраф за сбой при запуске в производство будет высоким.

Предполагая, что ZipInputStream не работает, что я могу сделать, чтобы решить эту проблему в случаях, когда нет заголовков входа? Я используюОпределение Википедии, который включает в себя комментарий о том, как правильно распаковать ZIP-файлы (цитируется ниже), как стандарт.

EDIT

Библиотека Apache Commons Zip имеетхорошо написать по некоторым из проблем, использующих Stream (как их решение, так и Java). Я также добавлю, из википедии и личного опыта, что поле size и crc в заголовках записей может не заполняться (у меня есть файлы с -1 в этих полях). Благодаряcentic за предоставление этой ссылки.

Кроме того, позвольте мне процитировать Википедию на эту тему:

Tools that correctly read zip archives must scan for the signatures of the various fields, the zip central directory. They must not scan for entries because only the directory specifies where a file chunk starts. Scanning could lead to false positives, as the format doesn't forbid other data to be between chunks, or uncompressed stream containing such signatures.

Обратите внимание, чтоZipInputStream сканирует записи, а не центральный каталог, что является проблемой с ним.

Final Edit

Если кому-то интересно,этот скрипт может использоваться для создания действительного ZIP-файла, который не может быть прочитанZipInputStream из существующего файла ZIP. Итак, для окончательного редактирования этого закрытого вопроса мне понадобилась библиотека, которая может читать файлы, подобные файлам, созданным этим сценарием.

Ответы на вопрос(4)

Ваш ответ на вопрос