序列化 是将对象写入到文件中(用字节流 OutputStream为后缀 Object为前缀 即ObjectOutputStream)
反序列化 事件文件中的对象读取出来
写对象方法:
public static void write() throws IOException {
FileOutputStream fos = new FileOutputStream("/Users/Commander/Desktop/test/wuqian.txt");
//创建序列化流
ObjectOutputStream oos = new ObjectOutputStream(fos);
//序列化接口 Serializable接口 标识性接口
//如果你这个类想进行序列化的话 必须要实现该接口
//person类要实现该接口
oos.writeObject(new Person("dahai", 18));
//关闭资源
oos.close();
}
读对象方法:
public static void read() throws ClassNotFoundException, IOException {
FileInputStream fis = new FileInputStream("/Users/Commander/Desktop/test/wuqian.txt");
ObjectInputStream ois = new ObjectInputStream(fis);
//读取对象时 需要按照你的class文件来读取
//删除class文件 来测试
Object object = ois.readObject();
System.out.println(object);
ois.close();
}
com.Commander.Person;
local class incompatible: stream classdesc serialVersionUID = -6087359909798547000,
local class serialVersionUID = -951049060551913565
本地的类和流读取时的序列号不同
给该类生成一个永久的序列号
注:
序列化时 都会生成一个序列号
生成一个序列号 (常量)
这样就不会发生序列号不同的异常了
在自定义的类中写一句:
private static final long serialVersionUID = -7921907563958649664L;
注意:大多数的系统类都实现了序列化接口
你只需要把你自定义的类在序列化的时候实现接口就行了