bre*_*ine 2 java serialization deserialization
我有一个序列化到文件中的对象列表:
class MyClass implements Serializable {
public String location;
public SomeClass lastUpdatedAt;
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,我现在有了这个类的新版本,并且我们不再有 SomeClass 了;原因很复杂,但我需要将其序列化回新形式(这是一个示例类,显然不是实际的类):
class MyClass implements Serializable {
public String location;
}
Run Code Online (Sandbox Code Playgroud)
简而言之,我想在反序列化时忽略一个属性。
请注意,我无法更改原始类源文件。我只有新的源文件
但是,当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();
}
Run Code Online (Sandbox Code Playgroud)
我知道你可以扩展ObjectInputStream并在那里实现一些东西,但我对序列化不太熟悉,希望有人解决同样的问题。
class MyClass implements Serializable {
public String location;
public transient SomeClass lastUpdatedAt;
}
Run Code Online (Sandbox Code Playgroud)
也许你已经成功了。如果不起作用,那么您必须重写该方法。
因此,我不喜欢自动序列化,而是手动进行:实现要序列化的字段以及如何序列化。
如果您使用内置函数,每次更新代码时都会遇到相同的向后兼容性问题。
| 归档时间: |
|
| 查看次数: |
4173 次 |
| 最近记录: |