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