对象序列化与反序列化
对象中的数据有:new Object() 自己的成员变量
如果对象的基本数据不变,反复使用
什么是序列化
将对象中的数据以二进制方式存入硬盘,永久保存
二进制文件可以在网络上传输
反序列化
将存在硬盘中的二进制文件,读取出来还原对象中的数据
写对象的流,实现对象的序列化,Java.io.ObjectOutputStream
读对象的流,实现对象的序列化,java.io.ObjectInputStream
对象类,需要实现Serializable开启序列化功能
静态,成员变量,属于自己的类,不属于对象,不能序列化
transient 修饰成员变量,组织对象序列化
Serializable接口,
里面没有抽象方法,实现后,不用写任何方法,
修改源代码后,class文件不会重新计算序列号
给类,自己定义一个序列号
Exception in thread "main" java.io.InvalidClassException:
Person; local class incompatible: stream classdesc serialVersionUID = 5106964254523124602,
local class serialVersionUID = -3636218586871335542
import java.io.*;
/**
* @author Alina
* @date 2021年12月11日 4:28 下午
* 对象序列化
*/
public class ObjectStreamDemo {
public static void main(String[] args) throws IOException, ClassNotFoundException {
// writeObiect();
readObject();
}
public static void writeObiect() throws IOException {
ObjectOutputStream oop = new ObjectOutputStream
(new FileOutputStream("/Users/yuzhang/Desktop/IOPrctice/test2.txt"));
Person p = new Person();
oop.writeObject(p);
oop.flush();
oop.close();
}
public static void readObject() throws IOException, ClassNotFoundException {
ObjectInputStream ois = new ObjectInputStream
(new FileInputStream("/Users/yuzhang/Desktop/IOPrctice/test2.txt"));
Object obj = ois.readObject();
System.out.println(obj);
}
}