Android, вычисляющий хэш SHA-1 из файла, самый быстрый алгоритм
У меня проблема с производительностью SHA-1 на Android. В С# я получаю вычисляемый хеш примерно в 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;
}
}
Любые идеи о том, как повысить производительность?
Ответы
Ответ 1
Я тестировал его на своем SGS (i9000), и для генерации хэша для файла 10.1MB потребовалось 0.806s.
Единственное отличие заключается в том, что в моем коде я использую BufferedInputStream в дополнение к FileInputStream и библиотеке преобразования hex, найденной по адресу:
http://apachejava.blogspot.com/2011/02/hexconversions-convert-string-byte-byte.html
Также я предлагаю вам закрыть поток ввода файла в предложении finally
Ответ 2
Если бы я был вами, я бы использовал JNI, как этот парень, и ускорил его таким образом. Это именно то, для чего был создан интерфейс C.