版本控制或優化文件備份時,一個想法是僅使用已修改的增量或數據。用於Java中文件增量/版本控制的現有解決方案
這聽起來像一個簡單的想法,但實際上確定未修改的數據在哪裏結束,新的數據開始是否是一項艱鉅的任務。
是否有一個現有的框架已經做了這樣的事情或一個有效的文件比較算法?
版本控制或優化文件備份時,一個想法是僅使用已修改的增量或數據。用於Java中文件增量/版本控制的現有解決方案
這聽起來像一個簡單的想法,但實際上確定未修改的數據在哪裏結束,新的數據開始是否是一項艱鉅的任務。
是否有一個現有的框架已經做了這樣的事情或一個有效的文件比較算法?
XDelta不是Java,但無論如何值得一看。它有Java version它,但我不知道它有多穩定。
這聽起來像您正在描述基於差異的存儲方案。大多數源代碼控制系統使用這樣的系統來最小化其存儲需求。 * nix「diff」命令能夠生成您自己需要實現的數據。
您可能會考慮利用開源版本控制系統(例如Subversion),而不是自行開發。您獲得的不僅僅是這種delta版本控制算法。
Source Forge是一個使用版本控制的網站。對於版本控制系統,您可以使用Subversion,CVS,git,mercurial等。 – 2011-02-13 18:56:41
@Peter:我絕對不應該在午夜之後回答問題,謝謝,我的意思是SVN。 – 2011-02-13 21:23:47
SVN有很多用途,不僅僅用於開發。我在生產中使用它來部署和版本化我們的配置文件。 – 2011-02-14 08:51:37
這裏是一個Java庫,可以在兩個純文本文件之間的計算來進行比較:
http://code.google.com/p/google-diff-match-patch/
我不知道二進制的diff任何庫雖然。嘗試使用谷歌搜索'java binary diff';-)
至於我的意見,Bsdiff工具是二進制文件的最佳選擇。它使用後綴排序(Larsson和Sadakane的qsufsort)並利用可執行文件的更改方式。 Bsdiff是由Colin Percival用C++編寫的。由Bsdiff創建的差異文件通常比由Xdelta創建的文件小。
還值得注意的是,Bsdiff使用bzip2壓縮算法。有時可以使用其他壓縮算法(如WinRAR歸檔器的壓縮算法)進一步壓縮由Bsdiff創建的二進制補丁。
在這裏您可以找到Bsdiff文檔和下載Bsdiff免費網站:http://www.daemonology.net/bsdiff/
精確。這是爲了儘量減少所需的存儲空間,因爲保持相同文件的不同版本可能會很快佔用空間。這對備份方案也很有用。 – 2011-02-13 12:28:34