Schlechte Performance der Java unzip Dienstprogramme

Habe ich bemerkt, dass der unzip-Anlage in Java ist sehr langsam im Vergleich zur Verwendung einer nativen tool wie WinZip.

Gibt es eine Drittanbieter-Bibliothek für Java, die effizienter ist?
Open Source bevorzugt.

Bearbeiten

Hier ist ein speed-Vergleich mit der Java-built-in-Lösung vs 7zip.
Ich fügte hinzu, buffered input/output-streams in meiner ursprünglichen Lösung (danke Jim, dies machte einen großen Unterschied machen).

Zip Dateigröße: 800K
Java Lösung: 2.7 Sekunden
7Zip Lösung: 204 ms

Hier ist der geänderte code mit dem built-in Java-Dekompression:

/** 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();
  }
}
  • Ich habe keine Probleme mit der unzip-Funktionen, und ich habe die Verarbeitung von 250 MB zip-Dateien enthalten, die Gzip-komprimierter text-Dateien. Was machst du, dass das dauert so lange? Ist es etwas komplexer?
  • Vielleicht, wenn Sie es tun, in einem low-priority-thread ?
  • Ich empfehle:if( entry.getName().contains("..") ) continue;
  • Die Antwort auf diese Frage ist zwar sinnvoll, aber die Nützlichkeit hat keine Beziehung zu der Frage, (da die Frage an sich falsch war). Ich bin versucht zu gehen, ändern Sie die Frage zu "Warum ist mein entpacken von Java-code so langsam" zu helfen, zukünftige Suchende... Die top-Antwort ist ausgezeichnet, aber. Wäre es eine schlechte Idee, mich einfach gehen, und ändern Sie die Frage?
InformationsquelleAutor Tony | 2010-07-23
Schreibe einen Kommentar