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}