【发布时间】:2011-01-09 20:45:57
【问题描述】:
如果我有一个存储在会话中的类的实例,我需要使其可序列化。这个类有一个静态变量,会在每个存储的实例中序列化吗?
静态变量是对包含后台大量数据的缓存的引用。所有这些数据都会被序列化吗?如果是这样,最好使此变量为瞬态并在每次恢复实例时重新获取缓存实例。可能根本不在类中存储缓存实例。
当类从序列化状态恢复时,构造函数会执行吗?如果没有,我可以使用其他方法来恢复瞬态变量吗?
【问题讨论】:
-
执行最多派生的不可序列化超类的无参数构造函数,但不执行序列化类的构造函数。
readObject(或readObjectNoData可以替换默认的反序列化(参见 API 文档)。 -
@Tom,替换?那么,如果我实现其中一种方法,我需要自己处理所有的序列化吗?
-
Trumstedt 通常您会提供(而不是覆盖)
readObject。该方法应该做的第一件事是调用defaultReadObject或readFields。 -
@Tom,好的,我明白了。现在,如果我有一个未序列化的静态字段,我需要确保在 readObject 方法中,如果静态字段没有值(还没有其他类分配它),则再次实例化该静态字段?
标签: java serialization