繁体   English   中英

使用 Java 获取唯一文件哈希的最快方法是什么?

[英]What is the fastest way to get unique file hash using Java?

我想编写一个供个人使用的程序,它遍历我所有卷的文件树,以查找重复文件。 我知道有一些程序可以做到这一点,但没有一个程序能按照我想要的方式去做,而且似乎很少有人使用文件散列来检查准确性。 可能是因为散列需要时间。

当我遍历文件树时,我将在 mySQL 数据库中存储三条信息,它们是:

  • 完整文件路径
  • 文件大小
  • 哈希签名

因为出于我的目的,如果满足所有这些条件,文件将被视为重复文件:

  • 文件名是一样的
  • 文件大小是一样的
  • 哈希签名是相同的。

鉴于前两个条件为真,就哈希算法而言,条件三不需要非常准确

树遍历完成后,我将在数据库中搜索匹配的文件哈希,然后检查其他条件......

我知道 MD5 似乎是生成唯一文件哈希签名的“事实标准”,但随着时间的推移,它的成本很高,而且在我的项目中,我将为数百万个文件生成哈希签名,而不是想要等待几天才能完成该过程。

因此,根据我的要求,在 Java 中生成文件哈希签名的最快方法是什么,足以用作两个文件确实重复的最终验证?

谢谢

更新:经过一番思考和下面的讨论,我决定稍微改变我的方法,以便我只在满足前两个条件后对文件进行更深入的比较。 这意味着我将遍历树并创建数据库条目,然后在文件名和大小相等时进行更深入的计算,并且我将探索校验和方法而不是散列。

我最近一直在研究一个类似的问题,并最终得到了一组类似的条件。 我决定尝试 MurmurHash3,因为它似乎是专门为这个应用程序构建的。 它不是加密安全的,在这种情况下不需要,但似乎很轻。

Apache 在他们的commons-codec包中有一个实现。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM