Эффективно рассчитать контрольную сумму MD5
Вопрос
Я использую следующий код, чтобы получить контрольную сумму файла. Он использует 50% процессора во время расчетов.
MessageDigest md = MessageDigest.getInstance("MD5");
InputStream is = new FileInputStream("C:\\Temp\\Small\\Movie.mp4"); // Size 700 MB
byte [] buffer = new byte [blockSize];
int numRead;
do
{
numRead = is.read(buffer);
if (numRead > 0)
{
md.update(buffer, 0, numRead);
}
} while (numRead != -1);
byte[] digest = md.digest();
Что можно сделать, чтобы уменьшить код с использования максимального процессора, кроме Thread.sleep (MS)
С уважением, Кингсли Рувим Дж.
Решение
Вы можете использовать Thread.setPriority(int newPriority)
Метод для уменьшения приоритета потока. Это приведет к тому, что другие потоки более высокого приоритета будут выполняться чаще. Тем не менее, ваш MD5 не будет рассчитываться как если бы вы оставили приоритет в одиночку - почему вы не хотите, чтобы этот расчет завершился как можно быстрее?
РЕДАКТИРОВАТЬ: Вот Реализация "Fast MD5", что может похвастаться значительным повышением производительности (в среднем на 26%) по сравнению с дефолтом Java java.security.MessageDigest
реализация. Смотрите страницу автора для подробной информации, включая примеры кода и тесты. Анкет Код доступен под GNU LGPL 2.1 Лицензия.
Другие советы
Я бы предпочел посвятить приоритетное управление ОС, для Windows вы можете начать свое приложение с
start /low your_executable