用于Java的VCDIFF或替代二进制差异格式

时间:2009-07-10 06:40:52

标签: java compression vcdiff

是否有VCDIFF二进制差异格式(解码器和编码器)的开源Java实现?

xdeltaopen-vcdiff,但这些都是C库。

或者,是否可以使用其他格式/算法从Java生成二进制文件的差异?

5 个答案:

答案 0 :(得分:4)

您可以使用badiff生成二进制差异;该网站是

http://badiff.org/

它可以在maven中心使用。它是BSD许可的,对OSS和商业都很友好。使用的算法是本文中描述的O(ND)差异的分块版本:

http://www.xmailserver.org/diff2.pdf

diff格式与其他任何东西都不是特别兼容,但它会产生一些非常好的和非常小的差异。

图书馆很快;在我的桌面计算机上,它可以在54秒内为两个随机50MB输入流生成差异。希望这足够快;我认为这是相当令人印象深刻的,因为这是两个令牌流的比较,每个令牌流有5000万个令牌。在计算差异时,badiff将利用多个CPU核心。

免责声明:我是badiff的作者,所以当然我认为这很酷。我总是乐于接受建议;诸如能够读/写“标准”二进制差异格式之类的东西听起来就像在即将发布的版本中添加的很酷的新功能。

答案 1 :(得分:3)

我有一个用C#编写的VCDIFF的解码器,如果有任何帮助的话,移植到Java可能相当简单。它是MiscUtil的一部分,但我不认为它依赖于MiscUtil的任何其他位(或者只是最低限度,无论如何)。

不幸的是我从来没有编写过编码器,这显然是相当困难的 - 在我们的情况下是不必要的(我们需要在移动设备上在.NET中应用补丁,但是可以创建它们但是我们想要服务器)。

答案 2 :(得分:3)

我将MiscUtil的vcdiff解码器移植到java。 https://github.com/xiaxiaocao/jvcdiff 更新:现在它还有一个vcdiff编码器

答案 3 :(得分:1)

有一个xdelta的java端口: http://sourceforge.net/projects/javaxdelta/

但我不能说它的质量 - 我还没试过。

答案 4 :(得分:1)

我在Github上有一个Java port of open-vcdiff。它针对open-vcdiff进行了测试,但它并未在任何地方用于生产。