java中的可序列化工作原理如何?

时间:2011-01-09 20:45:57

标签: java serialization

如果我有一个我存储在会话中的类的实例,我需要使它可序列化。这个类有一个静态变量,它会在存储的每个实例中被序列化吗?

静态变量是对包含后台大量数据的缓存的引用。所有这些数据都会被序列化吗?如果是这样,似乎最好使此变量成为瞬态,并在每次恢复实例时重新获取缓存实例。也许不会在课堂上存储缓存实例。

当一个类从序列化状态恢复时,构造函数是否会执行?如果没有,我可以使用任何其他方法来重新设置瞬态变量吗?

2 个答案:

答案 0 :(得分:11)

  

这个类有一个静态变量,会   这在每个实例中都是序列化的   存储

没有。根据{{​​3}}:“类的默认可序列化字段被定义为非瞬态和非静态字段。”

  

当一个类从序列化状态恢复时,构造函数是否会执行?

没有。反序列化绕过构造函数(除非你有一个不可序列化的超类)。

  

如果没有,我可以使用其他方法来重新设置瞬态变量吗?

您可以使用readObject()方法,如Java Object Serialization Specificaiton API文档中所述。

答案 1 :(得分:3)

静态和瞬态字段未序列化。不,没有调用构造函数。有关详情,请查看:http://java.sun.com/developer/technicalArticles/ALT/serialization/