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 записей и не более.