更新:我用一个很棒的外部库解决了这个问题 - https://code.google.com/p/xdeltaencoder/。我这样做的方式在下面发布为接受的答案
想象一下,我有两台独立的电脑,它们都有相同的 byte[] A。
其中一台电脑创建了 byte[] B,它几乎与 byte[] A 相同,但它是一个“较新”的版本。
为了让第二台电脑将他的 byte[] A 副本更新为最新版本(byte[] B),我需要将整个 byte[] B 传输到第二台电脑。如果 byte[] B 的大小有很多 GB,这将花费太长时间。
是否可以创建一个 byte[] C 是 byte[] A 和 byte[] B 之间的“差异”?对 byte[] C 的要求是知道 byte[] A,就可以创建 byte[] B。
这样,我只需将 byte[] C 传输到第二台 PC,理论上它只是 byte[] B 大小的一小部分。
我正在寻找用 Java 解决这个问题的方法。
非常感谢您提供的任何帮助:)
编辑:在大多数情况下,数据更新的性质是额外的字节被插入到数组的一部分中。当然,可能会更改某些字节或删除某些字节。byte[] 本身代表目标 PC 上所有文件/文件夹名称的树。byte[] 最初是通过创建自定义对象树,使用 JSON 编组它们,然后使用 zip 算法压缩该数据来创建的。我正在努力创建一种可以智能地创建对象 c 的算法。
编辑2:非常感谢这里的每个人提供的所有帮助,我很抱歉这么长时间没有活跃。我很可能会尝试让一个外部库为我进行增量编码。关于这个线程的一个重要部分是我现在知道我想要实现的目标是什么!我相信,当我找到合适的解决方案时,我会发布并接受它,以便其他人可以看到我是如何解决我的问题的。再次,非常感谢您的帮助。