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