有效地计算MD5校验和
题
我正在使用以下代码获取文件的校验和文件。在计算过程中,它使用了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)以外的最大CPU中减少代码做些什么来减少代码
问候,金斯利·鲁本(Kingsley Reuben J)
解决方案
您可以使用 Thread.setPriority(int newPriority)
减少线程优先级的方法。这将导致其他高优先级线程更频繁地执行。但是,您的MD5不会像您独自离开优先级一样快地计算出来 - 为什么您不希望此计算尽快完成?
编辑: 这里有一个 “快速MD5”实施, ,比Java的默认值大大提高性能(平均快26%) java.security.MessageDigest
执行。有关详细信息,请参阅作者页面 代码示例 和 基准. 。该代码可在 GNU LGPL 2.1许可证.
其他提示
我宁愿将优先管理专用于操作系统,因为Windows可以使用
start /low your_executable
不隶属于 StackOverflow