定义一个Person类
public class Person implements Serializable {
/*如果可序列化类未显式声明 serialVersionUID,
则序列化运行时将基于该类的各个方面计算该的 默认 serialVersionUID 值
*/
static final long serialVersionUID = 42L;
private String name;
private Integer age;
public Person(String name, Integer age){
this.name = name;
this.age = age;
}
public Person(){
}
public void show(){
System.out.println(this.name+"---->"+this.age);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
private void eat(String food){
System.out.println("eat--->"+food);
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
public class PersonSerializable {
public static void main(String[] args) throws IOException, ClassNotFoundException {
new PersonSerializable().test();
new PersonSerializable().test1();
}
public void test1() throws IOException, ClassNotFoundException {
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("G:\\config.txt"));
Person person = (Person) ois.readObject();
System.out.println(person.getName()+":"+person.getAge());
}
public void test()throws IOException{
Person person = new Person("zs", 23);
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("G:\\config.txt"));
oos.writeObject(person);
}
}
如果不显式声明 serialVersionUID,修改该类则会发生错误,因为序列化流往硬盘中write时会生成一个UID,反序列化流往硬盘read时也会生成一个UID,UID的大小是JVM根据当前的类来计算的,此时两个UID不相同将会报错。
local class incompatible: stream classdesc serialVersionUID = -9015421330688494688, local class serialVersionUID = 1234735069430313971