Java 有效地计算MD5校验和

Java 有效地计算MD5校验和,java,md5,checksum,cpu-usage,reduce,Java,Md5,Checksum,Cpu Usage,Reduce,我使用以下代码来获取文件的校验和。在计算过程中,它使用了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(

我使用以下代码来获取文件的校验和。在计算过程中,它使用了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

您可以使用该方法降低线程的优先级。这将导致更频繁地执行其他优先级更高的线程。但是,您的MD5计算速度不会像您不考虑优先级一样快——为什么不希望此计算尽快完成


EDIT:这里有一个例子,与Java默认的
Java.security.MessageDigest
实现相比,它的性能显著提高(平均快26%)。有关详细信息,请参见作者页面,包括和。代码可以在下找到。

我宁愿将优先级管理专用于操作系统,对于windows,您可以使用它启动应用程序

start /low your_executable

50%在单核或双核cpu上?:)我猜它是在双核上。@Quamis所以答案是获得更多的核。我对你的问题进行了评论,答案部分在下一页。我想指出你可能发布了错误的数据。您的算法似乎可以计算文件的md5sum。这是一项非常密集的CPU+磁盘任务。所以我假设你的CPU应该是100%。你说的是50%,这让我认为你有一个双核系统,在这种情况下,实际的cpu(核心)使用率将是100%。机器有双核处理器。这段代码在Servlet中实现,以检查上传文件的完整性。50到100个文件将同时从一组10k文件上载到服务器。