2011-04-06 12 views
11

Mam problem z wydajnością SHA-1 na Androida. W języku C# otrzymuję obliczony skrót w około 3 s, same obliczenia dla systemu Android trwa około 75s. Myślę, że problem polega na odczytaniu operacji z pliku, ale nie jestem pewien, jak poprawić wydajność.Android, obliczanie skrótu SHA-1 z pliku, najszybszy algorytm

Oto moja metoda generowania skrótu.

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

Jakieś pomysły, w jaki sposób mogę poprawić wydajność?

+0

jaki jest rozmiar pliku, który czytasz? – SirDarius

+0

Spróbuj uruchomić swój kod bez metody 'asHex (..)' (po prostu zwróć bajt []). –

+0

Używam pliku 6 MB, usunięcie asHex (..) nie pomogło:/ –

Odpowiedz

4

Przetestowałem to na moim SGS (i9000) i zajęło 0.806s, aby wygenerować hash dla pliku 10,1 MB.

Jedyną różnicą jest to, że w moim kodu używam BufferedInputStream dodatkowo do FileInputStream i biblioteki konwersji hex adresem:

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

Również chciałbym sugerować, że zamknięciu strumień wejściowy plik w ostatecznym zdaniu

+2

Ten link jest uszkodzony od 11.10.2015. – keithbhunter

+0

Link jest uszkodzony w 2017 roku. – jpros

Powiązane problemy