我是否做错了什么,还是Android的JVM实现SHA1非常缓慢?以下是我的代码:
in = new FileInputStream("/mnt/sdcard/200mb");
MessageDigest digester = MessageDigest.getInstance("sha1");
byte[] bytes = new byte[8192];
int byteCount;
int total = 0;
while ((byteCount = in.read(bytes)) > 0) {
total += byteCount;
digester.update(bytes, 0, byteCount);
Log.d("sha", "processed " + total);
}
这里是日志:
10-31 13:59:53.790 D/sha ( 3386): processed 4931584
10-31 13:59:54.790 D/sha ( 3386): processed 5054464
10-31 13:59:55.780 D/sha ( 3386): processed 5177344
这里的速度大约是每秒100k,对我来说是不可接受的。
我正在使用物理设备(LG P990,2.2.2)。我能用Java取得更好的结果吗,还是必须研究JNI实现?
我已经尝试过改变缓冲区大小,但没有显著差异。
Traceview 结果
所以看起来瓶颈在于更新哈希表。
研究
很有趣。当我在2.3.2上尝试时(SE Xperia),处理速度约为12兆/秒。当我在2.2(HTC Legend)上尝试时,速度甚至比第一个设备还要慢。难道从2.3开始发生了一些变化吗?