java跟踪实例属性的更改
我们正在进行一个多进程项目,该项目将RMI用于RPC
我们面临的问题是,必须在进程之间传递的主对象非常大(序列化时),这大大降低了代码的性能
由于这些过程都不会改变整个对象,只会改变其中的一小部分,所以我们决定通过RMI传递“修改”
但我没有找到合适的方法来实现这样的概念。第一个想法是跟踪主实例的所有更改。但根据{a1}的说法,这似乎并不容易
我需要一种方法,我们可以:
- 快速发展
- 表演快
有什么建议吗
你可以在下面搜索框中键入要查询的问题!
我们正在进行一个多进程项目,该项目将RMI用于RPC
我们面临的问题是,必须在进程之间传递的主对象非常大(序列化时),这大大降低了代码的性能
由于这些过程都不会改变整个对象,只会改变其中的一小部分,所以我们决定通过RMI传递“修改”
但我没有找到合适的方法来实现这样的概念。第一个想法是跟踪主实例的所有更改。但根据{a1}的说法,这似乎并不容易
我需要一种方法,我们可以:
有什么建议吗
# 1 楼答案
我认为最好的方法是自定义序列化,这样您就可以只发送更改。您可以通过实现的私有方法来实现这一点
私有void writeObject(java.io.ObjectOutputStream)当然还有另一端的readObject。那么,在这个函数中你应该做什么呢? 我建议您管理所有已更改成员的位图,并仅在序列化中发送它们,只需将未更改的成员更改为null并在序列化中发送对象,然后返回这些值。在另一边读位图,你就会知道如何
# 2 楼答案
看看http://docs.oracle.com/javase/tutorial/uiswing/events/propertychangelistener.html
这是一个简单的示例,但使用这种方法,您可以创建不同的PropertyChangeListener,并在其方法propertyChange中提供不同的逻辑。 也可以仅对一小部分属性触发更改,而不是对所有属性触发更改(不存储oldValue,也不触发PropertyChangeSupport的firePropertyChange方法)
当然,您可以使用AOP,但也许您正在寻找如上所述的解决方案。我希望这有帮助
# 3 楼答案
第一次需要传递整个对象时
在对象上使用PropertyChangeListener,这将生成PropertyChangeEvent
您可以传递PropertyChangeEvent。它具有getSource(),通过它可以识别对象。如果这还不够,如果您需要IOR或任何其他类型的引用,请创建一个包装并将其发送到
-麦迪
# 4 楼答案
只需将此“主对象”设置为实现远程接口的远程对象,并将其导出,而不是将其前后序列化