He notado que la facilidad de descompresión en Java es extremadamente lenta en comparación con el uso de una herramienta nativa como WinZip.Desempeño deficiente de las herramientas de descompresión de Java
¿Existe una biblioteca de terceros disponibles para Java que es más eficiente? Open Source es preferido.
Editar
Aquí es una comparación de velocidad usando la solución integrada en Java vs 7zip. Agregué flujos de entrada/salida almacenados en mi solución original (gracias a Jim, esto hizo una gran diferencia).
Zip Tamaño de archivo: 800K Solución de Java: 2,7 segundos solución 7Zip: 204 ms
Este es el código modificado utilizando el incorporado en Java descompresión:
/** 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();
}
}
he tenido ningún problema con las funciones descomprimir, y se han procesado 250 MB de archivos zip que contienen gzipped archivos de texto. ¿Qué estás haciendo que lleva tanto tiempo? ¿Es algo complejo? –
¿Tal vez si lo haces con un hilo de baja prioridad? –
Recomiendo encarecidamente: 'if (entry.getName(). Contains (" ..")) continue;' –