在版本化或优化文件备份时,一个想法是仅使用已修改的增量或数据。
这听起来像一个简单的想法,但实际上确定未修改数据的结束位置和新数据的开始是一项艰巨的任务。
现有的框架是否已经做过类似的事情或有效的文件比较算法?
答案 0 :(得分:3)
您可以考虑利用开源版本控制系统(例如Subversion),而不是自己滚动。通过这种方式,您获得的不仅仅是delta版本化算法。
答案 1 :(得分:3)
XDelta不是Java,但无论如何都值得一看。它有Java version但我不知道它有多稳定。
答案 2 :(得分:1)
听起来您正在描述基于差异的存储方案。大多数源代码控制系统使用这样的系统来最小化其存储要求。 * nix“diff”命令能够生成您自己实现它所需的数据。
答案 3 :(得分:1)
这是一个可以在两个纯文本文件之间计算差异的Java库:
http://code.google.com/p/google-diff-match-patch/
我不知道任何二进制差异库。尝试谷歌搜索'java二进制差异'; - )
答案 4 :(得分:1)
至于我的观点,Bsdiff工具是二进制文件的最佳选择。它使用后缀排序(Larsson和Sadakane的qsufsort)并利用可执行文件的变化。 Bsdiff是由Colin Percival用C ++编写的。 Bsdiff创建的Diff文件通常小于Xdelta创建的文件。
值得注意的是,Bsdiff使用bzip2压缩算法。 Bsdiff创建的二进制补丁有时可以使用其他压缩算法进一步压缩(如WinRAR归档程序)。
以下是您可以找到Bsdiff文档并免费下载Bsdiff的网站:http://www.daemonology.net/bsdiff/