RMI序列化/元帅

时间:2013-11-02 10:49:01

标签: java serialization rmi

我需要对java中的序列化进行一些澄清。如果我序列化一个对象,我想通过RMI返回该对象,我只是在我的对象的自定义类上实现serializable?我已经看过objectoutputstream和objectinputstream但我不知道我是否需要使用它们,因为我不太了解它们的用法。我的第二个问题是我如何制作一个arraylist可序列化?我的第三个问题可能与我的第一个问题有关,但如何在返回之前编组一个对象?序列化对象会在过程中对其进行编组吗?

让我们打电话给有问题的课句:

public class Sentence implements Serializable  {

}

然后我将创建该类的实例并从其他类

返回该对象

2 个答案:

答案 0 :(得分:2)

  1. 是的:实现Serializable使您的对象可序列化,除非它引用了不可序列化的对象。 RMI在内部使用对象流来发送和接收对象。如果使用RMI,则无需使用它们。如果要使用套接字发送对象,或将其保存到文件中,则可以使用它们。

  2. ArrayList已经可序列化。看看它的javadoc。你不需要做任何事情。

  3. 您只需从RMI方法返回对象,RMI将为您序列化它。序列化和编组是两个基本上意味着相同的词。同样,如果RMI方法接受一个参数,RMI将序列化作为参数传递的对象,将其发送到RMI服务器,然后将其反序列化,然后调用您的实际方法。这一切都是由RMI完成的。

答案 1 :(得分:1)

Serializable就是所谓的标记接口;它只是告诉Java你的类有一些能力,而不需要你实现任何特定的方法。在类中实现它会告诉JVM可以(有意义地)获取Java对象的字段并将它们转换为打包的表单,以便以后或在另一台计算机上使用。

如果您班级中的所有字段均为Serializable,那么您只需即可。如果您的字段不是Serializable,例如包含网络连接或本机资源的字段,则需要将它们标记为transient(由序列化忽略)并注意将它们设置为备份通过覆盖readObject和/或writeObject对您的课程进行反序列化时。