【发布时间】:2012-07-04 17:32:26
【问题描述】:
java 为一个对象序列化什么?
静态字段?
非静态字段?
方法原型?
方法体?
【问题讨论】:
-
这是某种测验吗?我能赢什么?
-
您考虑过阅读文档吗? StackOverflow 不是研究助理。
标签: java oop serialization
java 为一个对象序列化什么?
静态字段?
非静态字段?
方法原型?
方法体?
【问题讨论】:
标签: java oop serialization
默认情况下,用内置的东西?
非静态(非瞬态)字段,对类的引用(完全确定方法原型和主体),仅此而已。
自定义序列化可以为所欲为,但序列化应该是写一个单一的实例对象,这当然排除了静态方法或变量...
【讨论】:
方法没有被序列化,因为它们来自类定义本身。静态字段没有被序列化,因为它们再一次不属于实例本身,而是属于类(如果序列化值可以应用于另一侧,那么在每个实例中序列化某些东西的意义是什么? )。所以答案只是字段。
但是即使对于字段,也存在文件被限定为transient 并且这些不会被序列化的情况。例如:
public class T implements Serializable {
transient int i = 0;
}
在这种情况下,i 不会被序列化,每个反序列化的实例都将呈现值为 0 的i。
【讨论】:
静态字段?
没有
非静态字段?
如果它们不是transient 并且类实现Serializable
方法原型?
没有
方法体?
没有。
【讨论】:
它序列化实例数据,而不是静态数据或方法。有多种方法可以调整保存的数据,使用 transient 关键字、Externalizable 接口和其他一些东西。
至关重要的是,如果一个对象直接或间接引用其他对象,所有其他对象也将被序列化。因此,序列化一个对象可能会导致数百万个对象的序列化。它是一个强大的工具,对善和恶。
此外,如果您将多个对象写入 ObjectOutputStream,并且已经直接或间接写入了一个对象,则只会将引用发送到流。在被读取时,新对象将包含第一次写入的数据。写入文件时这不是问题,但是(以及大量的内存使用)在写入套接字时可能会令人尴尬。 (无论如何,这让我很尴尬。提示:使用 reset() 方法。)
【讨论】: