Я переписываю ваш код с помощью nio, код выглядит примерно так:
private static String generateMD5(FileInputStream inputStream){
if(inputStream==null){
return null;
}
MessageDigest md;
try {
md = MessageDigest.getInstance("MD5");
FileChannel channel = inputStream.getChannel();
ByteBuffer buff = ByteBuffer.allocate(2048);
while(channel.read(buff) != -1)
{
buff.flip();
md.update(buff);
buff.clear();
}
byte[] hashValue = md.digest();
return new String(hashValue);
}
catch (NoSuchAlgorithmException e)
{
return null;
}
catch (IOException e)
{
return null;
}
finally
{
try {
if(inputStream!=null)inputStream.close();
} catch (IOException e) {
}
}
}
На моей машине генерация кода md5 для большого файла занимает около 30 с, и, конечно, я тестирую ваш кодКроме того, результат показывает, что nio не улучшает производительность программы.
Затем я пытаюсь получить время для io и md5 соответственно, статистика указывает на то, что медленный файл io является узким местом, потому чтодля io требуется около 5/6 времени.
При использовании библиотеки Fast MD5, упомянутой @Sticky, для генерации кода md5 требуется всего 15 секунд, это замечательно.