Библиотека сжатия Java для поддержки Deflate64

Ищите альтернативную библиотеку Java сжатия для Apache Commons Compress ( https://commons.apache.org/proper/commons-compress/). Commons Compress выдает ошибку при попытке прочитать zip-запись, которая была сжата с использованием "ENHANCED_DEFLATED", которое является deflate64. Вот пример выдержки, которая выдает исключение.

public void doRecurseZip(File inputFile)
        throws IOException{
    ZipFile srcZip = null;
    srcZip = new ZipFile(inputFile);

    final Enumeration<ZipArchiveEntry> entries = srcZip.getEntries();
    while (entries.hasMoreElements()) {
        final ZipArchiveEntry srcEntry = entries.nextElement();
        String entryFilename = srcEntry.getName();
        String entryMimetype = "application/octet-stream";
        boolean canRead = srcZip.canReadEntryData(srcEntry);
        InputStream zipStream = srcZip.getInputStream(srcEntry);
        zipStream.close();
    }
    srcZip.close();
}

Вот соответствующая часть трассировки стека:

org.apache.commons.compress.archivers.zip.UnsupportedZipFeatureException: неподдерживаемый метод объекта 'ENHANCED_DEFLATED', используемый в записи test.docx в org.apache.commons.compress.archivers.zip.ZipUtil.checkRequestedFeatures(ZipUtil.java:35) org.apache.commons.compress.archivers.zip.ZipFile.getInputStream(ZipFile.java:404) в ZippingAround.doRecurseZip(ZippingAround.java:23)

Кто-нибудь знает другую библиотеку zip, которая может заменить Commons Compress или, возможно, работать вместе с ней для метода сжатия deflate64?

3 ответа

Решение

В феврале 2018 года Apache выпустил Compress v1.16, который включает поддержку ENHANCED_DEFLATEDт.е. Deflate64, Мне нужна была эта поддержка, и я обнаружил, что она работает.

zlib имеет декомпрессор Deflate64 (в C) в каталоге contrib/infback9. Вы должны будете интегрировать это в свой zip-декодер.

Библиотека 7zip-javabinding использует JNI для переноса 7zip, который поддерживает Deflate64. Он предоставляет решения для конкретной платформы, или, если вы так склонны, они также предоставляют all-platforms решение.

Библиотеки доступны на Maven Central.

Если кто-то найдет чистое решение Java, пожалуйста, отправьте другой ответ!:-)

Другие вопросы по тегам