2011-07-27 58 views
0

我正在存储一些基于校验和的文件,但我发现一个缺陷,2校验和有时可能是相同的。单实例文件存储与JAVA

我总是试图寻找API而不是重新发明轮子,但我找不到任何东西。

我知道theres JSR 268和JackRabbit作为内容存储的标准,但我的应用程序使用这种东西是光年。

那么,是否有单一的实例文件存储与Java的方法,或者我应该继续搜索我的校验和的新算法?

编辑:

当numcheck不工作:2文件是完全一样的,只是在不同的文件系统位置。然而,当从客户端发送来的服务器端不可能知道它们之前的路径时,所以它是相同的文件两次,相同的校验和。

如果你想检索任何一个,你如何检查?

想知道是否有一个标准的方法,API或算法,可以帮助我看出其中的区别

+0

使用MD5或SHA1。然后他们不会被复制。 – bmargulies

+0

给你一个不用担心的想法... [git](http://git-scm.com/)使用SHA-1来识别文件(“blob”)。它无法区分具有相同SHA-1签名的两个文件 - 它们被假定为相同的文件,并且差异会丢失。据我所知,没有人声称丢失了任何文件。 –

+0

@Ed Staub我编写了一个脚本,将大量色情图片集的文件名更改为他们的SHA-1哈希(删除重复项),并发现了几个冲突。这不太可能,但它可能发生。 – Christopher

回答

3

无论散列算法是多么强大,总有一个collision的机会。哈希算法从无限数量的输入中生成有限数量的哈希。

+0

有趣,现在的问题是如何处理碰撞? – javaNoober

0

确保两个文件不相同的唯一方法是逐点比较它们。散列它们更容易,更快,但带有碰撞风险。