Zip-файлы с Java: есть ли предел? - PullRequest
11 голосов
/ 19 июля 2011

Я создаю процедуру резервного копирования для моего приложения с Java. Однако если размер zip-файла превышает 4 ГБ или в нем содержится более 65 000 файлов (приблизительно), zip-файл поврежден.

Я также тестирую сжатие Apache Commons для сжатия в tar.gz, но оно имеет ограничение имени файла в 100 символов. Я хотел протестировать это сжатие API в zip, но мне интересно, в чем именно проблема с java zip.

Итак, реальный вопрос: я делаю что-то не так, это ограничение реализации Java Zip или ограничение для самого формата Zip?

Спасибо.

Ответы [ 4 ]

13 голосов
/ 19 июля 2011

Цитата из Википедия :

Оригинальный формат ZIP имел ограничение в 4 ГБ для разных вещей. (несжатый размер файла, сжатый размер файла и общий размер архива), а также ограничение в 65535 записей в ZIP-архиве.

и около ZIP64:

Встроенный в Java java.util.zip не поддерживает его с сентября 2010, но он был добавлен в OpenJDK и планируется включить в Java 7.

4 голосов
/ 19 июля 2011

Это ошибка, исправленная в Java 7: http://bugs.sun.com/view_bug.do?bug_id=4681995

Один из комментаторов в этих билетах упоминает TrueZIP в качестве обходного пути.

2 голосов
/ 19 июля 2011

Размер стандартных файлов Zip ограничен 4 ГБ.

См. Запись в википедии о zip-файлах для получения дополнительной информации ...... очевидно, вы можете получить гораздо более крупные файлы, если используете формат ZIP64.

p.s. если вы пытаетесь выполнить резервное копирование более 4 ГБ данных одновременно, возможно, вам следует подумать о другом подходе? Может быть, что-то, что делает снимок версионной файловой системы, было бы более уместным?

0 голосов
/ 12 марта 2016

Да, есть ограничение.Если вы пройдете через такие записи, как

        int count  = 0;
        for (Enumeration<? extends ZipEntry> e = zipFile.entries(); e.hasMoreElements(); ) {
            final ZipEntry ze = e.nextElement();
            count++;
        }

, он будет считаться до 65535 записей и не более.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...