Bajo rendimiento de las utilidades de descompresión de Java

He notado que la instalación de descompresión en Java es extremadamente lenta en comparación con el uso de una herramienta nativa como WinZip.

¿Hay una biblioteca de terceros disponible para Java que sea más eficiente? Se prefiere el código abierto.

Editar

Aquí hay una comparación de velocidad usando la solución integrada de Java vs 7zip. Agregué secuencias de entrada / salida almacenadas en mi solución original (gracias Jim, esto marcó una gran diferencia).

Tamaño del archivo zip: 800K Solución Java: 2.7 segundos Solución 7Zip: 204 ms

Aquí está el código modificado usando la descompresión Java incorporada:

/** 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();
  }
}

Respuestas a la pregunta(3)

Su respuesta a la pregunta