2011-04-06 5 views
11

Android'de SHA-1 performansı ile ilgili bir sorunum var. C# de yaklaşık 3s içinde hesaplanan karma alırsınız, Android için aynı hesaplama yaklaşık 75s sürer. Problemin dosyadan okunması sorunu olduğunu düşünüyorum, ancak performansı nasıl geliştireceğimi bilmiyorum.Android, dosyadan SHA-1 hash hesaplanıyor, hızlı algoritma

İşte karma üretim yöntemim.

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

Herhangi bir fikir Performansı nasıl geliştirebilirim?

+0

içinde okuduğunuz dosyanın boyutu nedir? – SirDarius

+0

Kodunuzu "asHex (..)" yöntemi olmadan çalıştırmayı deneyin (yalnızca byte []). –

+0

6MB dosyası kullanıyorum, kaldırma asHex (..) yardımcı olmadı:/ –

cevap

4

SGS (i9000) üzerinde test ettim ve 10.1MB dosya için karma oluşturmak için 0.806s aldı.

Tek fark benim kodunda ı bulunan FileInputStream ve altıgen dönüşüm kütüphanesine ek olarak BufferedInputStream kullanıyorum olmasıdır: Eğer dosya giriş akışı kapatmak o da öneririm

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

Sonunda madde

+2

Bu bağlantı, 11/10/15 tarihinden itibaren bozuldu. – keithbhunter

+0

Bağlantısı 2017'de bozuldu. – jpros