Schlechte Leistung der Entpackungsprogramme von Java

Ich habe festgestellt, dass die Dekomprimierungsfunktion in Java im Vergleich zur Verwendung eines nativen Tools wie WinZip extrem langsam ist.

Ist eine Drittanbieter-Bibliothek für Java verfügbar, die effizienter ist? Open Source wird bevorzugt.

Bearbeite

Hier ist ein Geschwindigkeitsvergleich mit der in Java integrierten Lösung vs 7zip. Ich habe meiner ursprünglichen Lösung gepufferte Eingabe- / Ausgabestreams hinzugefügt (danke Jim, das hat einen großen Unterschied gemacht).

Zip Dateigröße: 800K Java-Lösung: 2,7 Sekunden 7Zip-Lösung: 204 ms

Hier ist der geänderte Code, der die integrierte Java-Dekomprimierung verwendet:

/** Unpacks the give zip file using the built in Java facilities for unzip. */
@SuppressWarnings("unchecked")
public final static void unpack(File zipFile, File rootDir) throws IOException
{
  ZipFile zip = new ZipFile(zipFile);
  Enumeration<ZipEntry> entries = (Enumeration<ZipEntry>) zip.entries();
  while(entries.hasMoreElements()) {
    ZipEntry entry = entries.nextElement();
    java.io.File f = new java.io.File(rootDir, entry.getName());
    if (entry.isDirectory()) { // if its a directory, create it
      continue;
    }

    if (!f.exists()) {
      f.getParentFile().mkdirs();
      f.createNewFile();
    }

    BufferedInputStream bis = new BufferedInputStream(zip.getInputStream(entry)); // get the input stream
    BufferedOutputStream bos = new BufferedOutputStream(new java.io.FileOutputStream(f));
    while (bis.available() > 0) {  // write contents of 'is' to 'fos'
      bos.write(bis.read());
    }
    bos.close();
    bis.close();
  }
}

Antworten auf die Frage(6)

Ihre Antwort auf die Frage