2011-07-27 56 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

確保兩個文件不相同的唯一方法是逐點比較它們。散列它們更容易,更快,但帶有碰撞風險。