Java:圧縮アルゴリズムのテスト-16ファイル、5タイプ

こんにちは、「HabraCommunity」!

Javaを使用した主要な圧縮アルゴリズムの短いレビューとテスト結果を投稿します。

それが面白い人に私はキャットの下で尋ねます、誰にではありません-マイナスにしないで、主題がhabrの価値がないと言う要求-私はドラフトコピーで削除します。



だから:





















プレート、何を何回実行したか:


Steria.LZH 100

java.util.zip.GZIP(ストリーム)1000

java.util.zip.Deflater.BEST_COMPRESSION(ブロック)1000

java.util.zip.Deflater.BEST_SPEED(ブロック)1000

java.util.zip.Deflater.HUFFMAN_ONLY(ブロック)1000

apache.commons.compress.BZIP2(ストリーム)10

apache.commons.compress.GZIP(ストリーム)1000

apache.commons.compress.XZ(ストリーム)10

com.ning.LZF(ブロック)1000

com.ning.LZF(ストリーム)10

QuickLZ(ブロック)1000

org.xerial.snappy.Snappy(ブロック)1000



これが測定の方法です。


コードは私が作成したもので、それぞれに独自のスタイルがあります。 ですから、CORRECTNESSにはあまり議論しないようお願いします。



time:個々のアルゴリズム(実装)ごとに、呼び出したパブリック関数を使用してクラスを作成し、引数またはファイルまたはバイト[]へのパスとして渡します。


start = System.nanoTime(); byte[] compressedArray = compressor.compressing(arrayToCompress); end = System.nanoTime(); resultTime = end - start; start = System.nanoTime(); compressor.compressing(fileToCompress); end = System.nanoTime(); resultTime = end - start;
      
      







測定最小時間[ms]、平均時間[ms]、中央時間[ms]、最大時間[ms]:ArrayListでは、特定のファイルのすべての測定時間値を取得しました。


 private void minMaxMedianAverCalculation(int element) { ResultsSaver resultsSaver = (ResultsSaver) compressorsResults.get(activeTest); ArrayList<Long> elementsList = new ArrayList<Long>(); for (int i = 0; i < TEST_COUNT; i++) { long timeElement = resultsSaver.getNanoSecondsTime(i, element); elementsList.add(timeElement); } Collections.sort(elementsList); this.min = (elementsList.get(0)) / 1000000; this.max = (elementsList.get(elementsList.size() - 1)) / 1000000; int elementsListLength = elementsList.size(); if (elementsListLength % 2 == 0) { int m1 = (elementsListLength - 1) / 2; int m2 = m1 + 1; this.median = ((elementsList.get(m1) + elementsList.get(m2)) / 2) / 1000000; } else { int m = elementsListLength / 2; this.median = elementsList.get(m) / 1000000; } long totalTime = 0; for (int i = 0; i < elementsListLength; i++) { totalTime += elementsList.get(i); } this.average = (totalTime / TEST_COUNT)/1000000; }
      
      







ストリーム圧縮率の測定:


 private void setStreamCompressionRatio(String toCompressFileName, String compressedFileName) { ResultsSaver resultsSaver = (ResultsSaver) compressorsResults.get(activeTest); File fileToCompress = new File(toCompressFileName); long fileToCompressSize = fileToCompress.length(); File compressedFile = new File(compressedFileName); long compressedFileSize = compressedFile.length(); double compressPercent = Math.round(((double) compressedFileSize * 100) / fileToCompressSize * 100) / 100.0d; resultsSaver.setCompressionRatio(compressPercent); }
      
      







ブロック圧縮率の測定:


 private void setBlockCompressionRatio(byte[] arrayToCompress, byte[] compressedArray) { ResultsSaver resultsSaver = (ResultsSaver) compressorsResults.get(activeTest); long arrayToCompressSize = arrayToCompress.length; long compressedArraySize = compressedArray.length; double compressPercent = Math.round(((double) compressedArraySize * 100) / arrayToCompressSize * 100) / 100.0d; resultsSaver.setCompressionRatio(compressPercent); }
      
      







圧縮されたもの:


TextDat_1Kb.txtは、Wikipediaの記事のプレーンテキストです。

TextDat_100Kb.txt-いくつかのウィキペディアの記事の簡単なテキスト。

TextDat_1000Kb.txt-いくつかのウィキペディアの記事の簡単なテキスト(英語、ドイツ語、スペイン語..)。

PdfDat_200Kb.pdf-* .docと同じだけが変換されてフィットします。

PdfDat_1000Kb.pdf-* .docと同じだけが変換され、適合します。

PdfDat_2000Kb.pdf-* .docと同じ。変換および調整されたサイズのみ。

HtmlDat_10Kb.htm-タグ付きの写真を含まない一部のドキュメントのテキスト、次にフォーマットされたhtml。

HtmlDat_100Kb.htm-タグ付きの写真を含まない一部のドキュメントのテキスト。その後、HTMLをフォーマットします。

HtmlDat_1000Kb.htm-タグ付きの写真を含まない一部のドキュメントのテキスト、次にhtmlのフォーマット。

ExcelDat_200Kb.xls-excel関数random()により0から1までの乱数が詰め込まれています。

ExcelDat_1000Kb.xls-0から1までの乱数でパックされ、Excel関数random()。

ExcelDat_2000Kb.xls-excel関数random()によって0から1までの乱数が詰め込まれています。

DocDat_500Kb.doc-ウィキペディアの記事のテキストといくつかの図面(英語、ドイツ語、スペイン語..)。

DocDat_1000Kb.doc-Wikipediaの記事のテキストといくつかの図面(英語、ドイツ語、スペイン語..)。

DocDat_2000Kb.doc-Wikipediaの記事のテキストといくつかの図面(英語、ドイツ語、スペイン語..)。

HtmDat_30000Kb.htm-フォーマットされたテキストと数字付きのテーブル。



III、結果:habrastorage.org-このような写真を発行し、フルサイズの1800 * 615、クリックで増加させる方法を誰もが知ることができますか?












...



私はそれを正しくしましたが、正しくありませんでした。 アイデアを持っている人なら誰でも批判する準備ができています! スプレッド-誰かが役に立つかもしれません。



結果のいくつかは私にとって奇妙ですが、そのような数字は最終的に判明し、タブレットに入力されました。



Excelテーブルを慎重に挿入できるかどうかわからないので、写真を投げます。 誰かがExcelファイルを必要とする場合、問題なくアップロードします。

PSご清聴ありがとうございました。最後までお読みいただきありがとうございます。 :)



All Articles