gpt4 book ai didi

Java反序列化如何忽略属性

转载 作者:行者123 更新时间:2023-12-02 15:16:16 25 4
gpt4 key购买 nike

我有一个序列化到文件中的对象列表:

class MyClass implements Serializable {

public String location;
public SomeClass lastUpdatedAt;

}

不幸的是,我现在有了这个类的新版本,我们不再有 SomeClass 了;原因很复杂,但我需要将其序列化回这种新形式(这是一个示例类,显然不是实际类):

class MyClass implements Serializable {

public String location;

}

简而言之,我想在反序列化时忽略一个属性。

请注意,我无法更改原始类源文件。我只有新的源文件

然而 ObjectInputStream 试图在类路径中查找 SomeClass 时失败了:

try {
FileInputStream fis;
ObjectInputStream is;
File f = getSavedFile();
if (f.exists()) {
fis = new FileInputStream(f);
is = new ObjectInputStream(fis);
ArrayList<MyClass> result = (ArrayList<MyClass>) is.readObject(); //fails
is.close();
fis.close();
}
}
catch (Exception e) {
//ClassNotFound exception because SomeClass is not on the classpath.
e.printStackTrace();

}

我知道你可以扩展 ObjectInputStream 并在那里实现一些东西,但我对序列化不太熟悉,希望有人解决了同样的问题。

最佳答案

class MyClass implements Serializable {

public String location;
public transient SomeClass lastUpdatedAt;

}

也许你已经成功了。如果不起作用,则必须重写该方法。

出于这个原因,我不喜欢自动序列化,而是手动执行:实现要序列化的字段以及如何序列化。

每次更新代码时,如果使用内置函数,都会遇到向后兼容性问题。

关于Java反序列化如何忽略属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40232241/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com