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}
Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.