私のやり方が間違っているのでしょうか、それとも 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/秒で、私には受け入れられません。
物理デバイス (LG P990、2.2.2) を使用しています。Java でより良い結果を得ることができますか、それとも JNI の実装を調べる必要がありますか?
私はバッファサイズで遊んだ - 大きな違いはありません。
トレースビューの結果
したがって、ボトルネックはハッシュの更新にあるようです。
リサーチ
それは興味深い。2.3.2(SE Xperia)で試したところ、処理速度は約12メガ/秒でした。2.2 (HTC Legend) で試したところ、速度は最初のデバイスよりもさらに遅くなりました。2.3から何かが変わったのでしょうか?