Rapport sur l'�tat d'avancement de la compression
Manipulateur d’�v�nement de progression
Le processus de compression peut prendre beaucoup de temps, surtout si la taille des donn�es est importante. Pour les archives zip, il existe un �v�nement CompressionProgressed (
getCompressionProgressed/
setCompressionProgressed) pour rester inform�. Cet �v�nement s’appuie sur
ProgressEventArgs qui contient le nombre d’octets trait�s jusqu’� pr�sent.
C’est ainsi que nous pouvons nous abonner � cet �v�nement en utilisant
lambda expression :
1entry.setCompressionProgressed((sender, args) -> {
2 System.out.println(args.getProceededBytes() + " bytes compressed") ;
3}) ;Reporting Zip Progress Percentage (Rapport sur la progression de la compression)
A chaque fois que l’�v�nement CompressionProgressed est d�clench�, nous divisons le nombre ProceededBytes par la longueur du fichier original. Nous obtenons ainsi le ratio d’octets compress�s � ce moment-l�. Voici l’exemple complet.
1File source = new File("huge.bin") ;
2try (Archive archive = new Archive()) {
3 ArchiveEntry entry = archive.createEntry("huge.bin", source) ;
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(percent + "% compressed") ;
10 percentReady[0] = percent ;
11 }
12 }) ;
13 archive.save("output.zip") ;
14}Reporting 7z Progress Percentage (Rapport de progression 7z)
Une approche similaire est utilis�e pour l’archive 7z. Son entr�e poss�de ses propres m�thodes pour obtenir et d�finir l’�v�nement ( getCompressionProgressed/ setCompressionProgressed).
1Fichier source = nouveau fichier ("huge.bin") ;
2try (SevenZipArchive archive = new SevenZipArchive(new SevenZipEntrySettings(new SevenZipLZMA2CompressionSettings()))) {
3 SevenZipArchiveEntry entry = archive.createEntry("huge.bin", source) ;
4 final int[] percentReady = new int[1] ;
5 entry.setCompressionProgressed((sender, args) -> {
6 // l'exp�diteur est SevenZipArchiveEntry
7 int percent = (int)((100 * (long)args.getProceededBytes()) / source.length()) ;
8 if (percent > percentReady[0])
9 {
10 System.out.println(percent + "% compressed") ;
11 percentReady[0] = percent ;
12 }
13 }) ;
14 archive.save("output.zip") ;
15}