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.