是我做错了,还是 Android 的 SHA1 JVM 实现非常缓慢?我的代码如下:
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 / sec,对我来说这是不可接受的。
我正在使用物理设备(LG P990、2.2.2)。我可以使用 Java 获得更好的结果,还是必须研究 JNI 实现?
我玩过缓冲区大小 - 没有显着差异。
跟踪查看结果
因此,瓶颈似乎在于更新哈希。
研究
这太有趣了。当我尝试 2.3.2 (SE Xperia) 时,处理速度约为 12meg/sec。当我尝试 2.2 (HTC Legend) 时,速度甚至比第一台设备还要慢。会不会是因为 2.3 之后发生了一些变化?