2012-07-04 40 views
-4

Java为一个对象序列化了什么?java序列化过程序列化是什么?

静态字段?

非静态字段?

方法原型?

方法体?

+8

这是一种什么样的测验?我能赢得什么? – Pshemo

+0

可能的重复 - http://stackoverflow.com/questions/608647/what-is-serialization-in-java – user1329572

+2

确切的重复http://stackoverflow.com/questions/1781889/explanation-of-serialization-in-java? rq = 1 –

回答

4

默认情况下,内置的东西?

非静态(nontransient)字段,对类的引用(完全确定方法原型和实体),没有别的。

自定义序列可以做任何你想要的,但系列化应该编写一个实例对象,这肯定排除了静态方法或变量...

+1

不是对类的*名称的引用。 – EJP

2

静态字段?

没有

非静态字段?

只要不transient和类实现Serializable

方法的原型?

没有

方法的身体吗?

没有。

3

方法没有被序列化,因为它们来自类定义本身。静态字段不会被序列化,因为它们再次不属于实例本身,而是属于类(如果序列化的值可以应用于另一端,那么在每个实例中序列化某些内容时,只有一个序列化的含义是什么? )。所以答案只是字段。

即使对于字段,也存在文件被限定为transient的情况,这些将不会被序列化。例如:

public class T implements Serializable { 
    transient int i = 0; 
} 

在这种情况下,i不会被序列化和反序列化每个实例将呈现与i值0

0

它串行化实例数据,而不是静态数据或方法。有许多方法可以使用关键字transientExternalizable界面以及其他一些方法来调整保存的数据。重要的是,如果对象直接或间接引用其他对象,那么所有其他对象也将被序列化。因此,序列化一个对象可能会导致数百万个序列化。这是一个强大的工具,对于好的邪恶。另外,如果您向ObjectOutputStream中写入多个对象,并且一个对象已被直接或间接写入,则只有一个引用将被发送到流中。在读取时,新对象将包含第一次写入的数据。写入文件时这不是问题,但是(随着内存使用量的增加)在写入套接字时可能会令人尴尬。 (这让我很尴尬,无论如何。提示:使用reset()方法。)