目录结构
User类
import java.io.Serializable;
public class User implements Serializable{
private static final long serialVersionUID= 123456L;
public String name;
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
'}';
}
}
test01写入
import java.io.*;
public class test01 {
public static void main(String[] args) throws IOException {
User user =new User();
user.setName("ti 的 name");
System.out.println(user.toString());
FileOutputStream out = new FileOutputStream("./user.txt");
ObjectOutputStream bout = new ObjectOutputStream(out);
bout.writeObject(user);
//使用此方法将所有信息从基础缓冲区移动到其目标或清除缓冲区,或者同时执行这两种操作。
bout.flush();
bout.close();
System.out.println("写入完成");
}
}
test02读出
import java.io.*;
public class test02 {
public static void main(String[] args) throws IOException, ClassNotFoundException {
FileInputStream in = new FileInputStream("./user.txt");
ObjectInputStream obin = new ObjectInputStream(in);
User user = (User) obin.readObject();
obin.close();
System.out.println(user.toString());
}
}
运行test01将对象写入文件
运行test02将文件读出转换成对象
可以正常序列化和反序列化
读出前将serialVersionUID改变= 123451L;则会报错:
Exception in thread "main" java.io.InvalidClassException: User; local class incompatible: stream classdesc serialVersionUID = 123456, local class serialVersionUID = 123451
反序列化失败;
serialVersionUID是控制版本号的;确保序列化反序列化的代码一致。