在版本控制或优化文件备份时,一个想法是仅使用已修改的增量或数据。
这听起来一开始很简单,但实际上确定未修改的数据在哪里结束,新数据从哪里开始似乎是一项困难的任务。
是否有现有的框架已经做到了这样的事情或者高效的文件比较算法?
在版本控制或优化文件备份时,一个想法是仅使用已修改的增量或数据。
这听起来一开始很简单,但实际上确定未修改的数据在哪里结束,新数据从哪里开始似乎是一项困难的任务。
是否有现有的框架已经做到了这样的事情或者高效的文件比较算法?
不要自己开发,你可以考虑利用开源版本控制系统(例如,Subversion)。这样做不仅意味着获得增量版本控制算法,还能获得更多其他的功能。
就我个人而言,对于二进制文件,Bsdiff工具是最佳选择。它使用后缀排序(Larsson和Sadakane的qsufsort算法),并利用可执行文件的变化方式。Bsdiff是由Colin Percival用C++编写的。与Xdelta创建的文件相比,Bsdiff创建的差异文件通常更小。
值得注意的是,Bsdiff使用bzip2压缩算法。由Bsdiff创建的二进制补丁有时可以使用其他压缩算法(如WinRAR存档程序的算法)进一步压缩。
这里是您可以找到Bsdiff文档并免费下载Bsdiff的网站:http://www.daemonology.net/bsdiff/
听起来你在描述一种基于差异的存储方案。大多数源代码控制系统使用这样的系统来最小化它们的存储需求。*nix中的“diff”命令能够生成你需要实现它所需的数据。
http://code.google.com/p/google-diff-match-patch/
虽然我不知道有关于二进制差异的库,但是你可以尝试一下用谷歌搜索“java binary diff”;-)