我有一个包含变量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,但我想在开始处理之前进行验证。
答案 0 :(得分:2)
请在这里查看http://denis-zhdanov.blogspot.com/2009/09/serialversionuid-update-policy-on-class.html
删除字段 - 如果在类中删除某个字段,则写入的流将不包含其值。当流由较早的类读取时,该字段的值将设置为默认值,因为流中没有可用的值。但是,此默认值可能会对早期版本履行合同的能力产生不利影响;
添加字段 - 当正在重构的类具有未在流中出现的字段时,对象中的该字段将初始化为其类型的默认值。如果需要特定于类的初始化,该类可以提供一个readObject方法,该方法可以将字段初始化为非默认值;
答案 1 :(得分:0)
请参阅对象序列规范的Object Versioning部分,而不是依赖未经审核的未经审核的第三方博客。