圧縮の進行状況を報告します
進捗イベントハンドラー
特にデータサイズが巨大な場合、圧縮プロセスには長い時間がかかる場合があります。 zipアーカイブの場合、「compressionprogressed」イベント( getCompressionProgressprogress/ setCompressionprogressed)があります。このイベントは、これまでに進行したバイトの数を含む ProgressEventargsに依存しています。 これは、 lambda expressionを使用してこのイベントを購読する方法です。
1entry.setCompressionProgressed((sender、args) - > {
2 System.out.println(args.getProceedBytes() + "Bytes圧縮");
3});
zipの進行状況率のレポート
「Compression -Progrogress」イベントが発生するたびに、「ProceedBytes」数を元のファイルの長さで除算します。そのため、現時点で圧縮バイトの比率が見つかります。これが完全なサンプルです。
1ファイルsource = new file( "gage.bin");
2try(archive archive = new archive()){
3 ArchiveEntry entry = archive.createentry( "Mage.bin"、source);
4 final int []パーセントready = new int [1];
5 entry.setCompressionProgressed((sender、args) - > {
6 intパーセント=(int)((100 *(long)args.getProceedBytes()) / source.length());
7 if(パーセント>パーセント準備[0])
8 {
9 System.out.println(パーセント + "%圧縮");
10 PercentReady [0] =パーセント;
11 }
12 });
13 archive.save( "output.zip");
14}
7zの進行状況パーセンテージのレポート
同様のアプローチは、7Zアーカイブの場合です。そのエントリには、イベントを取得して設定するための独自の方法があります( getCompressionProgressed/ SetCompressionProgressed)
1ファイルsource = new file( "gage.bin");
2try(sevenziparchive archive = new SevenZiparchive(new SevenZipentrySettings(new SevenZiplzma2CompressIonsettings())){
3 SevenziparchiveEntry entry = archive.createentry( "gage.bin"、source);
4 final int []パーセントready = new int [1];
5 entry.setCompressionProgressed((sender、args) - > {
6 //送信者はSevenziparchiveentryです
7 intパーセント=(int)((100 *(long)args.getProceedBytes()) / source.length());
8 if(パーセント>パーセント準備[0])
9 {
10 System.out.println(パーセント + "%圧縮");
11 PercentReady [0] =パーセント;
12 }
13 });
14 archive.save( "output.zip");
15}