Как ускорить разбор записей в zip-файле на Java - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть веб-сервис, который на лету анализирует zip-файлы для определения их внутренней файловой структуры (имена файлов, каталоги и т. Д.) И отправляет результат обратно в виде json. Он отлично работает, за исключением того, что zip-файлы содержат очень большие файлы, и для получения ответа может потребоваться до нескольких десятков секунд, даже если в zip-файле всего несколько файлов. Я подозреваю, что алгоритм распаковки должен проанализировать весь файл, чтобы добраться до различных записей ZIP. Я использую стандартную библиотеку Java Zip. Вот некоторый основной код:

        ZipInputStream zis = new ZipInputStream(new FileInputStream(new File(myFilePath)));
        ZipEntry zipEntry = zis.getNextEntry();
        while(zipEntry != null){
            // code to generate the json file tree ---
            // --- end of code
            zipEntry = zis.getNextEntry();
        }

Я не читаю содержимое файлов или что-то еще, просто перебираю записи. Фактически, я мог запустить его пустым, как описано выше, и это все равно заняло бы много времени (и процессора).

Есть ли способ ускорить этот процесс? может быть, лучшая библиотека?

Спасибо!

1 Ответ

0 голосов
/ 10 сентября 2018

Согласно комментариям, лучший способ сделать это, то есть использовать ZipFile, а не ZipInputStream

   final ZipFile file = new ZipFile(filePath);
       final Enumeration<? extends ZipEntry> entries = file.entries();
       while ( entries.hasMoreElements() ) {
           final ZipEntry zipEntry = entries.nextElement();
           // code to generate the json file tree ---
           // --- end of code
       }
   }

Все кредиты должны идти к ответу Васима Вани на следующий вопрос Эффективное чтение zip-файла на Java Вот где я нашел код.

...