gpt4 book ai didi

java - "Fastest"Java实现的哈希函数,比较部分文件

转载 作者:太空狗 更新时间:2023-10-29 23:02:34 26 4
gpt4 key购买 nike

我需要在 Java 中比较实例"file"的两个不同文件,并希望使用快速哈希函数来完成此操作。

想法:- 散列文件 1 中的前 20 行- 散列文件 2 中的前 20 行- 比较两个哈希值,如果相等则返回 true。

我想使用 Java 中实现过的“最快”哈希函数。你会选择哪一个?

最佳答案

如果你想要速度,不要散列!尤其不是像 MD5 这样的加密散列。这些散列被设计成无法逆转,计算速度不快。您应该使用的是校验和 - 请参阅 java.util.zip.Checksum 及其两个具体实现。 Adler32 的计算速度非常快。

任何基于校验和或哈希的方法都容易受到冲突的影响,但您可以像 RSYNC 那样使用两种不同的方法来最大程度地降低风险。

算法基本上是:

  • 检查文件大小是否相等
  • 将文件分成大小为 N 字节的 block
  • 计算每对匹配 block 的校验和并进行比较。任何差异证明文件不相同。

这样可以及早发现差异。您可以通过使用不同的算法或不同的 block 大小同时计算两个校验和来改进它。

结果中的位数越多意味着冲突的可能性越小,但是一旦超过 64 位,您就超出了 Java(和计算机的 CPU) native 可以处理的范围,因此变慢了,因此 FNV-1024 不太可能给你一个假阴性,但速度要慢得多。

如果一切都与速度有关,只需使用 Adler32 并接受几乎不会检测到差异的情况。真的很难得。像这样的校验和用于确保互联网可以发现传输错误,以及错误数据出现的频率如何?

这真的与准确性有关,您必须比较每个字节。没有别的办法。

如果您可以在速度和准确性之间折衷,则有很多选择。

关于java - "Fastest"Java实现的哈希函数,比较部分文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5632604/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com