什么是SerialVersionUId
Java语言在对对象进行序列化的时候需要的一个版本号, 这个版本号可以是编译期间生成或者程序员在内部定义好 格式如下:
private static final long serialVersionUID= xxL
SerialVersionUId在序列化中的作用
Java语言在进行对实现seriallizable 接口的对象进行序列化的时候会把serialVersionUID写入文件(如果没有定义会由编译器完成)在进行反序列化的时候会先比较serialVersionUID 是否相同 如果相同会序列化 如果不相同会出现异常:
Exception in thread "main" java.io.InvalidClassException: Parameter; local class incompatible: stream classdesc serialVersionUID = -7159672487025754497, local class serialVersionUID = 65
翻译:
在线程 (main)中 无效类异常:类;不相容的本地类:类描述流 的serialVersionUID 为 -7159672487025754497而本地类的serialVersionUID 为65
例子:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class Parameter implements Serializable{
//private static final long serialVersionUID = 'A';
private int id = 7;
private String name = "diqye";
public Parameter(String value) {
this.name = value;
}
public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException {
ObjectOutputStream ops = new ObjectOutputStream(new FileOutputStream(new File("d:/parameter.obj")));
ObjectOutputStream ops1 = new ObjectOutputStream(new FileOutputStream(new File("d:/parameter1.obj")));
ops.writeObject(new Parameter("diqye2011"));
ops1.writeObject(new Parameter("diqye2012"));
//关闭处理
ops.flush();
ops.close();
ops1.flush();
ops1.close();
// ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File("d:/parameter1.obj")));
// Parameter p = (Parameter)ois.readObject();
// System.out.println(p.getId());
// System.out.println(p.getName());
// ois.close();
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
执行上述代码会 序列化到本地两个文件
d:/parameter1.obj 和d:/parameter.obj
打开分解:
把这块注释打开运行下再分解文件
//private static final long serialVersionUID = 'A'; //注释打开
至于版本号不对应 所抛的异常,请自行试验