我正在使用以下代码来获取文件的校验和。在计算过程中它将使用50%的CPU。
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))的代码
问候,
金斯利·鲁本J
最佳答案
您可以使用Thread.setPriority(int newPriority)
方法降低线程的优先级。这将导致其他更高优先级的线程被更频繁地执行。但是,MD5的计算速度不会像您单独保留优先级那样快-为什么您不希望此计算尽快完成?
编辑:这是"Fast MD5" implementation,与Java的默认java.security.MessageDigest
实现相比,它具有显着的性能提高(平均快26%)。有关详细信息,请参见作者页面,包括code examples和benchmarks。该代码在GNU LGPL 2.1 license下可用。