gpt4 book ai didi

java - 通过 ObjectInputStream 发送时,如何更新对象而不是完全重新写入对象

转载 作者:行者123 更新时间:2023-11-30 06:36:38 26 4
gpt4 key购买 nike

以下实现了通过 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());

}

最佳答案

Java 并没有真正具有一般复制或更新对象甚至检测差异的内置概念,您可以获得的最接近的是将对象序列化为数组,然后返回以复制它,这明显很慢而且仍然需要一些支持。

重点是您必须自己完成,但您可以对其进行编码以使其更通用。

Java 中只有少数“东西”。有扩展“Object”的内在类型和类。如果将两个“对象”传递给一个方法,该方法可以迭代同一类型的两个对象,反射性地对字段进行配对,识别每个字段的类型——如果字段是内在的,则复制该值,如果field 是一个子类,向下递归该类以复制 IT 的成员。这将使您的原始引用文献保持完整。

这有点痛苦,但可行——也许现在有人已经写了一个库,我必须手动完成。

如果它适合您的问题空间,那么更好的选择可能是考虑 RMI 解决方案。如果您的对象是“远程”对象,那么调用者可以直接调用您的 setter 之一。

注意:我的问题与您的问题不完全一样,但很接近,我必须检测两个数据库之间更改的对象,复制一些更改并记录它们。我最终注释了我想要复制的字段。当您必须使用反射时,注释非常有帮助。

关于java - 通过 ObjectInputStream 发送时,如何更新对象而不是完全重新写入对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45111548/

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