-5

java 为一个对象序列化什么?

静态字段?

非静态字段?

方法原型?

方法体?

4

4 回答 4

4

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

非静态(非瞬态)字段,对类的引用(完全确定方法原型和主体),仅此而已。

自定义序列化可以做任何你想做的事情,但是序列化应该写一个单一的实例对象,这当然排除了静态方法或变量......

于 2012-07-04T17:35:15.503 回答
3

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

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

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

在这种情况下,i不会被序列化,并且每个反序列化的实例都将呈现i值 0。

于 2012-07-04T17:52:38.173 回答
2

静态字段?

非静态字段?

前提是它们不是transient并且类实现Serializable

方法原型?

方法体?

不。

于 2012-07-04T17:35:49.170 回答
0

它序列化实例数据,而不是静态数据或方法。有许多方法可以调整保存的数据,使用transient关键字、Externalizable界面和其他一些东西。

至关重要的是,如果一个对象直接或间接地引用了其他对象,那么所有其他对象也将被序列化。因此,序列化一个对象可能会导致数百万个对象的序列化。它是一个强大的工具,无论善恶。

此外,如果您向 ObjectOutputStream 写入多个对象,并且已经直接或间接写入了一个对象,则只会将引用发送到流。在被读取时,新对象将包含第一次写入的数据。写入文件时这不是问题,但是(以及大量内存使用)在写入套接字时可能会令人尴尬。(无论如何,这让我很尴尬。提示:使用reset()方法。)

于 2012-07-05T21:04:05.853 回答