【发布时间】:2014-02-14 09:34:29
【问题描述】:
我知道不可能在另一台机器上或在单独的进程中传递对对象的引用,但是如果被引用的对象也是通过套接字发送的,那么可以将对象作为引用传递吗?或者完成同一件事的唯一方法是将两者都作为对象传递,然后在接收到“数据包”对象时重新附加它们的引用?
在我写这篇文章的时候,我突然想到了另一个想法,Java Serializable 类在引用被序列化时会复制引用的内容吗?
【问题讨论】:
-
一个“引用”是一个内存地址。您不知道远程系统上的内存地址是什么,所以我会正式说“不”。但是,您可以发送对象的完整副本,并在远程端重建副本。有些人称之为序列化,有些人称之为“编组”,但本质上你将拥有 2 个严格的副本。但是,那些复制品只是……复制品。更改不会影响另一个更改,除非您以某种方式手动同步对象。
-
这就是我认为我必须要做的。问题是我有两个对象数组,其中包含对另一种类型数组中特定对象的引用。所以我想我将不得不重新创建引用。转发作为答案?这就是我要找的。谢谢。
-
那么,您有两个对象,每个对象内部都有一个数组/集合,并且它们相互引用?像ManyToMany之类的?您是否考虑过一次发送整个 blob?也许将您需要发送的所有对象包装在某个消息包装器中,这样当它们从另一端弹出时它们都连接在一起?
-
是的,我愿意。我通过套接字发送包含引用的原始对象。它们作为对象而不是另一侧的引用弹出。收到整个内容后,我需要重新创建引用。
-
你是如何发送你的对象的?如果您一次发送一个,您将遇到问题。你最好将它们作为一堆发送,已经连接在一起。如果您要发送两个或多个相互引用的对象,您可以创建某种“消息”包装对象将它们放在一起并立即发送。此外,您可能希望查看除本机 Java 序列化框架之外的其他序列化方法。在我以前的工作中,我们曾经使用 XFire 来写出对象,因为它是 XML 并且没有对象版本控制的问题。
标签: java sockets object reference serializable