Java md5覆盖文件,而不读取内存中的完整文件

Java md5覆盖文件,而不读取内存中的完整文件,java,Java,有几个选项(例如)可以计算文件上的md5哈希值。然而,似乎所有这些都需要先读取文件。有没有办法在不将完整文件读入内存的情况下实现这一点?显然,要让哈希函数计算正确的哈希值,需要读取文件的所有字节。但你不必一下子把它们读到记忆中。您可以使用这样的流: MessageDigest md = MessageDigest.getInstance("MD5"); try (InputStream is = Files.newInputStream(Paths.get("file.txt"));

有几个选项(例如)可以计算文件上的md5哈希值。然而,似乎所有这些都需要先读取文件。有没有办法在不将完整文件读入内存的情况下实现这一点?

显然,要让哈希函数计算正确的哈希值,需要读取文件的所有字节。但你不必一下子把它们读到记忆中。您可以使用这样的流:

MessageDigest md = MessageDigest.getInstance("MD5");
try (InputStream is = Files.newInputStream(Paths.get("file.txt"));
     DigestInputStream dis = new DigestInputStream(is, md)) 
{
  /* Read decorated stream (dis) to EOF as normal... */
}
byte[] digest = md.digest();

实际上,您上面链接的答案所使用的问题使此问题重复。如果答案是直接适用的,请指出重复的答案,而不是张贴答案。正如其他人提到的,这是不可能的。但你为什么要使用MD5呢?您是否意识到MD5不再安全使用?(请参阅)“然而,似乎所有这些都需要先读取文件。”他们需要读取文件,是的。“有没有办法在不将整个文件读入内存的情况下实现这一点?”是的,没有理由必须将整个文件读入内存才能进行校验和。请参阅和问题的答案。