そのため、MD5チェックサムを計算するためのより高速な方法を探していて、Fast MD5ライブラリに出くわしましたが、マシンでJava 7を使用してベンチマークすると、Javaバージョンよりも出力が遅くなります。
私が愚かなことをしている(おそらく)か、Java 7がより良いアルゴリズムを実装している(おそらく)。これが私の超シンプルな「ベンチマーク」です。今日はコーヒーが足りなかったのかもしれません...
MD5 digest = new MD5();
System.out.println(MD5.initNativeLibrary(true));
byte[] buff = IOUtils.readFully(new FileInputStream(new File("blahblah.bin")), 64000000, true);
ByteBuffer buffer = ByteBuffer.wrap(buff);
for (int j = 0; j < 100; j++) {
start = System.currentTimeMillis();
String md5Base64 = Utilities.getDigestBase64(buffer);
end = System.currentTimeMillis();
total = total + (end-start);
}
System.out.println("Took " + ((total)/100.00) + " ms. for " + buff.length+" bytes");
total = 0;
for (int i = 0; i < 100; i++) {
start = System.currentTimeMillis();
digest.Init();
digest.Update(buff);
digest.Final();
end = System.currentTimeMillis();
total = total + (end-start);
}
System.out.println("Took " + ((total)/100.00) + " ms. for " + buff.length+" bytes");
そして私は得る:
Took 247.99 ms. for 64000000 bytes
Took 295.16 ms. for 64000000 bytes
コメントによると、私はベンチアムクを何度も実行し、最も奇妙な結果を得ました。FastMD5の計算は同じままですが、Java7バージョンは遅くなります。????
Took 246.54 ms. for 64000000 bytes
Took 294.69 ms. for 64000000 bytes
************************************
Took 540.55 ms. for 64000000 bytes
Took 292.69 ms. for 64000000 bytes
************************************
Took 537.07 ms. for 64000000 bytes
Took 292.12 ms. for 64000000 bytes