1

逐字节比较肯定有效。但我想知道是否有任何其他经过验证的方法,比如某种为每个文件输出唯一值的散列。如果有的话,每个人在时间和内存占用方面的优缺点是什么。

顺便说一句,我发现这个以前的线程检查文件是否相同的最快方法是什么?. 但是,我的问题不是关于速度,而是关于替代方案。

请指教。谢谢。

4

4 回答 4

3

唯一经过验证的方法是进行逐字节比较。这也是最快的方法,如果一次读取一个字节,您可以将内存使用量一直减少到 2 个字节。不过,一次读取较大的块对性能是有益的。

散列也将起作用。由于鸽巢原则,您得到误报的可能性很小,但出于所有意图和目的,如果您使用像 SHA 这样的安全哈希,则可以忽略不计。内存使用量也很小,但性能不如逐字节比较,因为你会有散列的开销。除非您可以重用哈希进行多次比较。

于 2009-08-14T08:49:42.027 回答
2

无论如何,如果你的文件是 n 字节长度,你必须比较 n 字节,你不能让问题变得更简单。

当文件不相同时,您只能通过检查长度来提高 n 比较的速度。

由于冲突,哈希不是一种经过验证的方法,并且要制作哈希,您还必须读取每个文件上的 n 个字节。

如果你想多次比较同一个文件,你可以使用散列,然后仔细检查一个字节到字节

于 2009-08-14T08:42:29.047 回答
1

散列不会输出“唯一”值。它不可能这样做,因为有无限数量的不同文件,但只有有限数量的哈希值。无需太多思考即可意识到要绝对确定两个文件相同,您将不得不检查它们的所有字节。

哈希和校验和可以提供一个快速的“这些文件不同”的答案,并且在某些概率范围内可以提供一个快速的“这些文件可能相同”的答案,但是为了确定相等性,你必须检查每个字节。怎么可能有办法解决这个问题?

于 2009-08-14T08:46:05.340 回答
0

如果要比较多个文件,那么SHA-1哈希算法是一个非常好的选择。

于 2009-08-14T08:49:38.783 回答