Я загружаю zipped файлы, содержащие XML файлы, и я бы хотел избежать записи zip файлов на диск, прежде чем манипулировать ими из-за требований к задержкам. Однако java.util.zip
мне не хватает. Невозможно сказать "здесь байтовый массив zip файла, используйте его", не превращая его в поток, а ZipInputStream
не является надежным, поскольку он сканирует заголовки записей (см. Обсуждение ниже EDIT по причинам, почему это не так надежный).
У меня пока нет доступа к zip файлам, которые я буду обрабатывать, поэтому я не знаю, смогу ли я обработать их через ZipInputStream
, и мне нужно найти решение, которое будет работать с любыми действительными ZIP файлами, поскольку штраф за провал, как только я пойду в производство, будет высоким.
Предполагая, что ZipInputStream не будет работать, что я могу сделать, чтобы решить эту проблему в тех случаях, когда нет заголовков записей? Я использую определение Википедии, в котором содержится комментарий о том, как правильно распаковать zip файлы (приведенные ниже) в качестве стандарта.
ИЗМЕНИТЬ
У библиотеки Apache Commons Zip есть хорошая запись по некоторым проблемам, использующим Stream (как их решение, так и Java). Я также добавлю, из википедии и личного опыта, и поле размера и crc на заголовках заголовков не может быть заполнено (у меня есть файлы с -1 в этих полях). Благодаря centic за предоставление этой ссылки.
Кроме того, позвольте мне процитировать википедию по теме:
Инструменты, которые правильно читают zip-архивы, должны сканировать подписи различные поля, центральный каталог zip. Они не должны сканировать потому что только каталог указывает, где фрагмент файла начинается. Сканирование может привести к ложным срабатываниям, поскольку формат не запретить другие данные быть между кусками или несжатым потоком содержащих такие сигнатуры.
Обратите внимание, что ZipInputStream
сканирует записи, а не центральный каталог, что является проблемой с ним.
Финальное редактирование
Если кому-то интересно, этот script можно использовать для создания действительного ZIP файла, который не может быть прочитан ZipInputStream
из существующий файл ZIP. Итак, в качестве окончательного редактирования этого закрытого вопроса мне нужна библиотека, которая может читать файлы, например, созданные этим script.