Java 对象差异:如何将差异应用于对象

kal*_*ali 5 java compare graph object

A'server_1上有一个包含列表、地图和其他集合的对象。然后我将此对象发送到server_2

之后,在server_1 上,对象A'更改为 state A''

关键是A''没有太多变化,并且将整个对象发送A''server_2很昂贵。

因此,如果我想更新server_2A'上对象的状态,我必须将这些对象之间的差异发送给server_2,然后应用到.dA = A'' - A'dAA'

我尝试使用两个库来获取dA

但是现在我很困惑如何将差异dA应用于server_2A'上的对象。

有人知道如何解决此问题或此用例的任何其他库吗?

编辑:对象结构示例(这个版本比实际对象简单一点):

class Outer {
    SimpleObj val1;
    List<ComplexObj> list;
    Map<String, Map<String, List<OtherComplexObj>> map;
}
Run Code Online (Sandbox Code Playgroud)

在不使用任何库的情况下递归检查所有字段似乎很复杂。

编辑:有一个 spring-synk 库。它是为我自己的情况而设计的,但我在为我的对象创建差异时遇到了 StackOverflowError。这个问题是由于我的对象的复杂性引起的,但我现在无法简化它。更改 jvm 参数无济于事。我想知道是否可以将这个库用于复杂的对象。

kal*_*ali 0

我使用了https://github.com/malensek/jbsdiff - 这个库让我可以获取对象的二进制差异,然后将此差异应用于server_2上对象 A' 的二进制表示。有一个关于这个解决方案的时刻 - 如果对象 A' 很大,它需要大量的内存分配,在我的例子中,它在老一代中分配。