Java的二进制差异库

10

在SO上有几个关于Java文本差异库的问题,但是没有关于二进制差异的。所以我来了:

我正在寻找一个用Java实现的二进制差异库。我发现了javaxdeltaGNU Diff port,但我想知道是否还有其他隐藏的宝藏?而且,也许有人使用过上述库?进行比较将非常有帮助。

最后,也许知道我想要使用Avro序列化的对象进行差异比较会有所帮助。


如果你想要进入非常底层的领域,你可以谷歌搜索“最长公共子串”,通常缩写为LCSS以区别于“最长公共子序列”。当然,如果你使用Java,除非你想使用Jython,否则你必须使用字节数组而不是字符串。 - jcomeau_ictx
3个回答

2
我发现了一个新的(据我所知)Java实现二进制差异的工具:JBDiff

0

如果你想比较 Avro 文件,请看看 Avro 编辑器,它包含了一个用于 Avro 序列化文件比较的实用工具。


谢谢你的提示,我之前不知道Avro有这样一个可视化编辑器/比较工具。然而,这并没有回答我的问题:我想对两个版本的Avro对象进行差异比较,然后修补原始对象以获得后者。好吧,我猜我会尝试一下我在问题中已经提到的那些库。 - Neeme Praks

-1

你的问题不够具体,导致很难得到一个好的答案。你所说的“二进制差分”是什么意思?

如果你想看到一个字节数组与另一个之间的所有差异列表,你可以实现或使用xdelta算法。你也可以使用od命令将文件转换为十六进制,并使用标准补丁/差异命令,如果你宁愿编写一个shell脚本而不是C。

然而,听起来你想做一些特定于Avro的事情。是这样吗?

如果你只想比较两个不同Avro文件的字段值并生成差异,而且你已经熟悉了Avro,那么你只需要编写一个程序,读取两个文件并以一种你后续能够转换原始文件的方式打印出差异即可。


1
正如我在之前的回答评论中提到的:“我有兴趣对比两个Avro对象版本的差异,并稍后修补原始对象以获得后者。”因此,这不仅仅是为了比较,而是为了记录差异并将其存储在单独的二进制流/文件中,稍后使用它来修补原始文件以获得其他文件。我将用它进行简单的版本控制。 - Neeme Praks

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接