Zip файлы с Java: есть ли предел?
Я создаю подпрограмму резервного копирования для моего приложения с Java.
Однако, когда zip файл превышает 4 ГБ или имеет более 65 000 файлов (приблизительно), zip файл поврежден.
Я также тестирую сжатие Apache Commons для сжатия на tar.gz, но имеет ограничение на имя файла 100 символов.
Я хотел проверить этот сжатие API на zip, но мне интересно, что именно представляет собой проблема с java zip.
Итак, реальный вопрос: я делаю что-то не так, это ограничение реализации Java Zip или является личным для самого формата Zip?
Спасибо.
Ответы
Ответ 1
Цитата из Wikipedia:
Оригинальный формат ZIP имел ограничение на 4 гигабайта на различные вещи (несжатый размер файла, сжатый размер файла и общий размер архива), а также предел 65535 записей в ZIP-архиве.
и около ZIP64:
Java-встроенный java.util.zip не поддерживает его по состоянию на сентябрь 2010, но он был добавлен в OpenJDK и планируется для включения в Java 7.
Ответ 2
Это сообщение об ошибке, зафиксированное в Java 7: http://bugs.sun.com/view_bug.do?bug_id=4681995
Один из комментаторов этих билетов упоминает TrueZIP как обходной путь.
Ответ 3
В стандартных файлах Zip существует ограничение на размер файла 4 ГБ.
См. запись в wikipedia в zip файлах для получения дополнительной информации...... очевидно, вы можете получать гораздо большие файлы, если используете ZIP64.
p.s. если вы пытаетесь создать резервную копию более 4 ГБ данных одновременно, возможно, вам стоит подумать о другом подходе? Может быть, что-то, что делает снимок с версией файловой системы, будет более уместным?
Ответ 4
Да, есть предел. Если вы просмотрите записи, например
int count = 0;
for (Enumeration<? extends ZipEntry> e = zipFile.entries(); e.hasMoreElements(); ) {
final ZipEntry ze = e.nextElement();
count++;
}
он будет подсчитывать до 65535 записей и не более.