2015-12-15 12 views
3

Ищет альтернативную компрессию java-библиотеки для Apache Commons Compress (https://commons.apache.org/proper/commons-compress/). Commons Compress выдает сообщение об ошибке при попытке прочитать запись в zip, сжатую с использованием параметра ENHANCED_DEFLATED, которое является deflate64. Вот пример выдержки, который выдает исключение.Библиотека компрессии Java для поддержки 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:357) на org.apache.commons.compress.archivers.zip.ZipFile.getInputStream (ZipFile.java:404) на ZippingAround .doRecurseZip (ZippingAround.java:23)

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

ответ

0

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

0

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

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

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