所以我正在阅读delta encoding,我正在寻找一些很好的例子。我认为谷歌浏览器会使用类似的内容进行补丁更新,rsync可能,维基百科文章暗示很多在线备份工具都会使用此功能。
我很好奇是否有任何好的Java库可以做这种工作?似乎有大量的基于* nix和C的工具,但是很少或没有Java等价物比压缩数据结构做得更多。
无论如何,这对我来说是一个全新的概念,所以我很想阅读有关它的任何内容,特别感兴趣的是看到有人使用Java来做这件事。
答案 0 :(得分:2)
我知道这是一个非常古老的问题,但我决定在这里发布,只是因为其他人偶然发现同样的问题。
这就是我目前正在使用的内容。它非常简单,效果很好。
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);
Update data only by difference between files (delta for java)
答案 1 :(得分:1)
维基百科lists several Java implementations for the VCDIFF delta format。
还存在rsync
算法的Java实现,可用于创建二进制差异。他们似乎没有生产准备,但如果你只是想看到代码,他们就没事了。请参阅Any good rsync library for Java?。