以下实现更新通过ObjectOutputStream发送的对象(在这种情况下使用套接字),但每次更新对象时都必须完全重写对象,否则对象使用后引用引用旧的发送的对象,不看新的对象。我不知道如果这样的事情每秒更新几次就会出现性能问题,但有没有办法更有效地做到这一点?
ObjectOutputStream objectOS = new ObjectOutputStream(connectionSocket.getOutputStream());
while(true){
objectOS.reset(); // Disgregard any objects already written to stream
System.out.println(kingBob.currentAge);
objectOS.writeObject(kingBob);
System.out.println("Update HP");
kingBob.updateCurrentAge(keyboard.nextInt());
}
答案 0 :(得分:1)
Java并没有真正拥有复制或更新对象的内置概念,甚至检测差异,您可以获得的最接近的是将对象序列化为数组并返回复制它,这显然很慢并且仍需要一些支持。
关键是你必须自己做,但你可以编写更通用的代码。
只有少数"东西"在java中。有内在的类型和类扩展"对象"。如果你传递两个"对象"对于一个方法,该方法可以迭代相同类型的两个对象,反射性地配对字段,识别每个字段的类型 - 如果字段是内在的,则复制该值,如果该字段是子类,则递归那个班级来复制IT的成员。这样可以保持原始参考文献的完整性。
这有点痛苦但可行 - 也许现在有人在那里写了一个图书馆,我不得不手工做..
如果它适合您的问题空间,那么更好的选择可能是查看RMI解决方案。如果您的对象是" Remote"然后调用者可以直接调用你的一个setter。
注意:我的问题与你的问题完全不同,但它很接近,我必须检测两个数据库之间的更改对象,复制一些更改并记录它们。我最后注释了我想复制的字段。当你必须使用反射时 - 注释非常有用。