Progreso de la compresión

**Manejador de Eventos de Progreso

El proceso de compresión puede llevar mucho tiempo, especialmente si el tamaño de los datos es grande. Para archivos zip, hay un evento CompressionProgressed ( getCompressionProgressed/ setCompressionProgressed) para mantenerse informado. Este evento depende de ProgressEventArgs que contiene el número de bytes procesados hasta el momento. Así es como podemos suscribirnos a este evento usando lambda expression:

1entry.setCompressionProgressed((sender, args) -> {
2    System.out.println(args.getProceededBytes() + " bytes comprimidos");
3});

Información del porcentaje de progreso de compresión

Cada vez que se produce el evento CompressionProgressed dividimos el número ProceededBytes por la longitud del fichero original. Así encontramos el porcentaje de bytes comprimidos en ese momento. Aquí está el ejemplo completo.

 1Archivo fuente = nuevo Archivo("enorme.bin");
 2try (Archivo = nuevo Archivo()) {
 3    ArchiveEntry entry = archive.createEntry("enorme.bin", fuente);
 4    final int[] percentReady = new int[1];
 5    entry.setCompressionProgressed((sender, args) -> {
 6        int percent = (int)((100 * (long)args.getProceededBytes()) / source.length());
 7        if (percent > percentReady[0])
 8        {
 9            System.out.println(porcentaje + "% comprimido");
10            percentReady[0] = porcentaje;
11        }
12    });
13    archive.save("salida.zip");
14}

Informar del porcentaje de progreso de 7z

Un enfoque similar es para el archivo 7z. Su entrada tiene métodos propios para obtener y establecer el evento ( getCompressionProgressed/ setCompressionProgressed)

 1Archivo fuente = new Archivo("enorme.bin");
 2try (SevenZipArchive archive = new SevenZipArchive(new SevenZipEntrySettings(new SevenZipLZMA2CompressionSettings()))) {
 3    SevenZipArchiveEntry entrada = archive.createEntry("enorme.bin", fuente);
 4    final int[] percentReady = new int[1];
 5    entry.setCompressionProgressed((sender, args) -> {
 6        // sender es SevenZipArchiveEntry
 7        int percent = (int)((100 * (long)args.getProceededBytes()) / source.length());
 8        if (percent > percentReady[0])
 9        {
10            System.out.println(porcentaje + "% comprimido");
11            percentReady[0] = porcentaje;
12        }
13    });
14    archive.save("salida.zip");
15}
Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.