13

AndroidでのSHA-1のパフォーマンスに問題があります。C#では約3秒で計算されたハッシュを取得しますが、Androidの場合と同じ計算には約75秒かかります。ファイルからの読み取り操作に問題があると思いますが、どうすればパフォーマンスが向上するのかわかりません。

これが私のハッシュ生成方法です。

private static String getSHA1FromFileContent(String filename)
    {

        try
        {
            MessageDigest digest = MessageDigest.getInstance("SHA-1");
            //byte[] buffer = new byte[65536]; //created at start.
            InputStream fis = new FileInputStream(filename);
            int n = 0;
            while (n != -1)
            {
                n = fis.read(buffer);
                if (n > 0)
                {
                    digest.update(buffer, 0, n);
                }
            }
            byte[] digestResult = digest.digest();
            return asHex(digestResult);
        }
        catch (Exception e)
        {
            return null;
        }
    }

どうすればパフォーマンスを向上させることができますか?

4

2 に答える 2

4

SGS(i9000)でテストしたところ、10.1MBのファイルのハッシュを生成するのに0.806秒かかりました。

唯一の違いは、私のコードでは、FileInputStreamと16進変換ライブラリに加えてBufferedInputStreamを使用していることです。

http://apachejava.blogspot.com/2011/02/hexconversions-convert-string-byte-byte.html

また、finally句でファイル入力ストリームを閉じることをお勧めします

于 2012-04-03T08:39:13.053 に答える
1

もし私があなたなら、私はこの人がしたようにJNIを使​​用し、そのようにスピードを上げます。これはまさにCインターフェースが作られた目的です。

于 2011-06-14T01:29:10.863 に答える