java 将对象序列化到文件后,若原对象更改了属性名称,增加/删除方法是否会反序列化失败?我试验了下,得出的结果是
1、序列化是根据private static final long serialVersionUID = 1L;来控制两边的版本的,如果这个不一致,即使是相同对象也会反序列化报错,因此这个是核心。
2、序列化后,若文件属性变更/删除/增加 将不影响反序列化成功。只是该值不会置入而已。
3、方法是不序列化的。 附上代码,大家可以试试。
代码如下:
/**
*
* 描述
*
* @author 锅巴
* @version 1.0 2010-7-5
*/
public class Test implements Serializable{
/**
*
*/
private static final long serialVersionUID = 2L;
private String id;
private String name;
private String content;
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String toString(){
return id + "-" + name;
}
public static void main(String[] args) throws Exception {
String fileName = "D:\\workspace_mvn\\my-nom\\obj.txt";
// Test t = new Test();
// t.setId("123456");
// t.setName("hello world");
// toFile(fileName,t);
Test t = (Test)fromFile(fileName);
System.out.println(t);
}
private static void toFile(String fileName,Object object) throws FileNotFoundException, IOException{
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(fileName,false));
oos.writeObject(object);
oos.close();
}
private static Object fromFile(String fileName) throws FileNotFoundException, IOException, ClassNotFoundException{
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(fileName));
return ois.readObject();
}
}