Используйте ZipFile вместо ZipInputStream .
Хотя в документации это не указано (в документации для JarFile
), для чтения файла следует использовать файловые операции с произвольным доступом. Поскольку ZIP-файл содержит каталог в известном месте, это означает, что для поиска определенного файла требуется ОЧЕНЬ МНОГО IO.
Некоторые предостережения: насколько мне известно, реализация Sun использует файл с отображением в памяти. Это означает, что ваше виртуальное адресное пространство должно быть достаточно большим, чтобы вместить файл и все остальное в вашей виртуальной машине Java. Что может быть проблемой для 32-битного сервера. С другой стороны, он может быть достаточно умным, чтобы избежать отображения памяти в 32-разрядной системе или отображения карты памяти только в каталоге; Я не пробовал.
Кроме того, если вы используете несколько файлов, обязательно используйте try
/ finally
, чтобы обеспечить закрытие файла после использования.