2011-04-06 20 views
11

AndroidでSHA-1のパフォーマンスに問題があります。 C#では約3秒で計算されたハッシュを取得しますが、Androidの同じ計算では約75秒かかります。私は問題がファイルから操作を読み込むことにあると思いますが、パフォーマンスを向上させる方法がわかりません。Android、ファイルからSHA-1ハッシュを計算する、最速アルゴリズム

私のハッシュ生成方法は次のとおりです。

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; 
     } 
    } 

パフォーマンスを向上させる方法を教えてください。

+0

あなたが読んでいるファイルのサイズは? – SirDarius

+0

'asHex(..)'メソッドなしでコードを実行してみてください(単にbyte []を返す)。 –

+0

私は6MBのファイルを使用して、asHex(..)を削除していません。/ –

答えて

4

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

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

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

また、私はあなたがあなたのファイル入力ストリームを閉じことを示唆しています最終節の

+2

このリンクは11/10/15時点で破棄されています。 – keithbhunter

+0

リンクは2017年に壊れています。 – jpros

1

私があなただったら、私はuse the JNI like this guy didになり、そのようにスピードを上げます。これはまさにCインタフェースが作られたものです。

関連する問題