Komprimierungsfortschritt melden

Progress Event Handler

Der Komprimierungsprozess kann sehr lange dauern, besonders wenn die Datenmenge sehr groß ist. Für Zip-Archive gibt es ein CompressionProgressed-Ereignis ( getCompressionProgressed/ setCompressionProgressed), um auf dem Laufenden zu bleiben. Dieses Ereignis stützt sich auf ProgressEventArgs, das die Anzahl der bisher verarbeiteten Bytes enthält. So können wir dieses Ereignis mit lambda-Ausdruck abonnieren:

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

Prozentuale Anzeige des Komprimierungsfortschritts

Jedes Mal, wenn das Ereignis CompressionProgressed ausgelöst wird, teilen wir die Zahl ProceededBytes durch die Länge der Originaldatei. So finden wir den Anteil der komprimierten Bytes im Moment. Hier ist das vollständige Beispiel.

 1Datei source = new Datei("huge.bin");
 2try (Archiv archive = new Archive()) {
 3    ArchiveEntry entry = archive.createEntry("huge.bin", source);
 4    final int[] percentReady = new int[1];
 5    entry.setCompressionProgressed((Absender, args) -> {
 6        int percent = (int)((100 * (long)args.getProceededBytes()) / source.length());
 7        if (percent > percentReady[0])
 8        {
 9            System.out.println(percent + "% komprimiert");
10            percentReady[0] = percent;
11        }
12    });
13    archive.save("output.zip");
14}

Bericht über den 7z-Fortschrittsgrad

Ein ähnlicher Ansatz gilt für 7z-Archive. Sein Eintrag hat eigene Methoden zum Abrufen und Setzen des Ereignisses ( getCompressionProgressed/ setCompressionProgressed)

 1File source = new File("huge.bin");
 2try (SevenZipArchive archive = new SevenZipArchive(new SevenZipEntrySettings(new SevenZipLZMA2CompressionSettings()))) {
 3    SevenZipArchiveEntry entry = archive.createEntry("huge.bin", Quelle);
 4    final int[] percentReady = new int[1];
 5    entry.setCompressionProgressed((Absender, args) -> {
 6        // Absender ist SevenZipArchiveEntry
 7        int percent = (int)((100 * (long)args.getProceededBytes()) / source.length());
 8        if (percent > percentReady[0])
 9        {
10            System.out.println(percent + "% komprimiert");
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.