因此,我正在阅读有关delta encoding的内容,并且正在四处寻找一些很好的例子。我认为谷歌浏览器使用类似的东西来更新补丁,rsync可能,维基百科的文章暗示很多在线备份工具都使用它。
我很好奇是否有任何好的 Java 库可以做这种工作?似乎有大量的 *nix 和基于 C 的工具,但很少或没有 Java 等价物除了压缩数据结构之外做得更多。
无论如何,这对我来说是一个全新的概念,所以我很想了解有关它的任何内容,特别有兴趣看到有人使用 Java 来做这件事。
我知道这是一个非常古老的问题,但我决定在这里发布这个问题,以防其他人偶然发现同样的问题。
这是我目前正在使用的。这真的很简单,而且效果很好。
https://code.google.com/p/xdeltaencoder/
不过,您需要确保对源进行校验和(在我的情况下为 fileAJson),因为它不会自动为您执行此操作!
无论如何,下面的代码:
//Create delta
String[] deltaArgs = new String[]{fileAJson.getAbsolutePath(), fileBJson.getAbsolutePath(), fileDelta.getAbsolutePath()};
XDeltaEncoder.main(deltaArgs);
//Apply delta
deltaArgs = new String[]{"-d", fileAJson.getAbsolutePath(), fileDelta.getAbsolutePath(), fileBTarget.getAbsolutePath()};
XDeltaEncoder.main(deltaArgs);
//Trivia, Surpisingly this also works
deltaArgs = new String[]{"-d", fileBJson.getAbsolutePath(), fileDelta.getAbsolutePath(), fileBTarget.getAbsolutePath()};
XDeltaEncoder.main(deltaArgs);
Wikipedia列出了 VCDIFF delta 格式的几个 Java 实现。
该rsync
算法还存在 Java 实现,可用于创建二进制差异。它们似乎还没有准备好生产,但是如果您只想查看代码,它们就可以了。请参阅适用于 Java 的任何好的 rsync 库?.