0

我有一个包含变量 ABC 的序列化类。我在类中声明了一个 serialVersionUID。我使用向量将类的实例保存到文本文件中。如果我要更改类(添加变量 D),我现在有 2 个不同的类(我试图从文件中读取的 ABC 和文件中的 ABCD)。如果我保持 serialVersionUID 相同,它是否会忽略 D 感觉我试图读取的内容只有 ABC?例子:

Class MyClass implements serializable
{
    serialVersionUID = 12345;
    int a = 0;
    int b = 0;
    int c = 0;  
}

Class implmentation
{
   MyClass me = new MyClass();
   me.a = 2;
   me.b = 4;
   me.c = 6;
} 

// 使用 objectOutputStream 保存到 txt 文件

// 稍后更改 myClass 以添加 int d = 0;

如果我想从文本文件中读取原始的 myClass 对象(我),它还能读取吗?

抱歉,我没有 SSCCE,但我想在开始研究之前进行验证。

4

2 回答 2

2

请看这里http://denis-zhdanov.blogspot.com/2009/09/serialversionuid-update-policy-on-class.html

删除字段 - 如果在类中删除字段,写入的流将不包含其值。当流被较早的类读取时,该字段的值将设置为默认值,因为流中没有可用的值。但是,此默认值可能会对早期版本履行其合同的能力产生不利影响;

添加字段 - 当正在重构的类具有流中未出现的字段时,对象中的该字段将被初始化为其类型的默认值。如果需要特定于类的初始化,该类可以提供一个 readObject 方法,该方法可以将字段初始化为非默认值;

于 2012-08-02T14:45:45.710 回答
0

与其依赖未经参考且未经审核的第三方博客,请参阅对象序列化规范的对象版本控制部分。

于 2012-08-05T09:52:44.083 回答