我在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;
}
}
任何想法如何才能提高效果?
答案 0 :(得分:4)
我在我的SGS(i9000)上进行了测试,并且花了0.806秒为10.1MB文件生成哈希值。
唯一不同的是,在我的代码中,除了FileInputStream和在以下位置找到的十六进制转换库之外,我还使用BufferedInputStream:
http://apachejava.blogspot.com/2011/02/hexconversions-convert-string-byte-byte.html
另外我建议您在finally子句
中关闭文件输入流答案 1 :(得分:1)
如果我是你,我会use the JNI like this guy did并以此方式加快速度。这正是C接口的用途。