【发布时间】:2014-09-08 07:52:22
【问题描述】:
我觉得有点奇怪。我有两个类通过 RMI 进行通信。如果我在生产系统上使用 RMI 传输对象图,那么在目的地,一些数据会丢失。
为了更深入地分析这一点,我将对象图序列化到磁盘上,然后通过 RMI 将其返回给调用者。在调用方我也将返回的对象写入磁盘。两个文件的大小不同。
使用小助手将它们传输回对象图我认识到在将数据传输到调用方的调用方后丢失了一些对象。
老实说,我觉得这很奇怪,我不知道发生了什么。因为同样的事情正在我的开发人员机器上工作。我预计会出现 SerializationException,但没有抛出任何异常。
我迷路了 ;-(。我希望如果一个对象序列化到磁盘有效,它也适用于 RMI。
有人知道调试此行为的第一步吗?
【问题讨论】:
-
序列化过程中会跳过不可序列化和瞬态字段,反序列化时会产生空值。这是你看到的吗?
-
嗨,马克,感谢您的回答。这正是我假设和看到的。我觉得生产方面的课程可能与我的开发机器(另一个版本)上的课程略有不同。我假设如果发生这样的事情我会遇到一个异常:客户端的 A 类实现了 Serializable,而主机端的 A 类没有。 (主机是调用者,客户端是RMI服务器)但是没有抛出,所以我没有得到哪些类没有被完全反序列化的信息。这正常吗?
-
如果指定了序列 UID 并且没有在版本之间更改(但在这种情况下,两个类都需要可序列化才能开始),则不会出现异常。这些类还必须足够接近,以使反序列化器不会抛出 NoSuchField 等异常。如果类包含不可序列化的字段,您将不会得到 NotSerializable 异常。您尝试序列化自身的类不得为了接收异常而实现该接口。
-
@MarkW 序列化不会“抛出 NoSuchField 之类的异常”。
标签: java object serialization deserialization rmi