java - 更新类的serialVersionUID理解

标签 java serialization

我有一个包含变量 ABC 的序列化类。我在类中声明了一个serialVersionUID。我使用 vector 将类的实例保存到文本文件中。如果我要更改类(添加变量 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,但我想在开始处理此问题之前进行验证。

最佳答案

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

删除字段 - 如果删除类中的字段,则写入的流将不包含其值。当较早的类读取流时,该字段的值将设置为默认值,因为流中没有可用的值。然而,这个默认值可能会对早期版本履行契约(Contract)的能力产生不利影响;

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

关于java - 更新类的serialVersionUID理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11778196/

相关文章:

java - Serializable/Cloneable/... 的惯用设计在 Scala 中看起来如何?

c++ - 如何将已编译的正则表达式 (std::regex) 保存/序列化到文件中?

html - 我可以自动序列化 Dart 对象以通过 Web Socket 发送吗?

java - 我正在从java读取文本文件(逗号作为分隔符)

java - Weblogic 12c 上的 Arquillian

java - 将 derby 数据库与 .net 连接

java - 有没有办法在 Spring MVC 测试中不使用 @MockBean?

java - 如何让 jackson 使用一种方法将类序列化为 JSON?

vb.net - 在 VB.Net 中序列化 ObservableCollection(of T)

java - 什么是NullPointerException,我该如何解决?