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}