gpt4 book ai didi

Java 对象差异 : How to apply diffs to an object

转载 作者:搜寻专家 更新时间:2023-11-01 03:49:59 24 4
gpt4 key购买 nike

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

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

重点是 A'' 没有太多变化,而且将整个对象 A'' 发送到 server_2 的开销很大。

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

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

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

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

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

class Outer {
SimpleObj val1;
List<ComplexObj> list;
Map<String, Map<String, List<OtherComplexObj>> map;
}

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

编辑:有 a spring-synk library .它是为像我这样的案例设计的,但是我在为我的对象创建差异时遇到了 StackOverflowError。由于我的对象的复杂性而出现此问题,但我现在无法简化它。更改 jvm 参数没有帮助。我想知道是否可以将此库用于复杂对象。

最佳答案

您可以发送一个字节来指定接下来要发送的字段。发送0表示发送结束。

public void sendDiff(MyClass obj){
if(!this.field1.equals(obj.field1)){
send(1) // 1 for field 1
send(obj.field1)
}
if(!this.field2.equals(obj.field2)){
send(2) // 2 for field 2
send(obj.field2)
}
// et.c for each field
send(0) // 0 to signify that we have finished sending the changed fields
}

如果字节后跟值已更改的字段,您将获得一个流。

关于Java 对象差异 : How to apply diffs to an object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31249178/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com