序列化和反序列化
序列化和反序列化
序列化就是可以把一个对象保存到磁盘中或发送到其他的服务器
反序列化就是把序列化生成的信息, 恢复对象! 序列化和反序列化一般不适用多态的形式创建对象, 否则可能无法使用writeObject()
和readObject()
方法
下面序列化和发序列化需要使用的类
class Student implements Serializable{
// 2. 自动 生成本文件的唯一标识, 版本号ID
private static final long serialVersionUID = 1L;
// 属性
private String name;
private int age;
// get, set, 有参, 无参, toString()方法...
}
序列化 - ObjectOutputStream
java.io.ObjectOutputStream
(序列化, 是OutputStream的一个子类)
需要序列化的的类必须实现Serializable
接口作为标记, 否则无法进行实例化
构造器
方法 | 说明 |
---|---|
ObjectOutputStream(OutputStream | 一般传入OutputStream的实现类 |
常用方法
返回值 | 方法 | 说明 |
---|---|---|
void | writeObject(Object obj) | 将指定的对象写入 ObjectOutputStream。 |
序列化实例:
try {
Student s = new Student("张三", 22);
// 创建对象
String path = "D:\\DEV\\eclipse\\workspace\\day14\\class.txt";
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(path));
// 开始序列化
out.writeObject(s);
// 释放资源
out.close();
} catch (IOException e) {
e.printStackTrace();
}
生成的文件内容:
反序列化 - ObjectInputStream
java.io.ObjectInputStream
(反序列化, 是InputtStream的一个子类)
构造器
方法 | 说明 |
---|---|
ObjectInputStream(InputStream in) | 一般传入InputStream的实现类 |
常用方法
返回值 | 方法 | 说明 |
---|---|---|
Object | readObject() | 读取对象,读取序列化数据。 |
反序列化实例:
try {
String path = "D:\\DEV\\eclipse\\workspace\\day14\\class.txt";
// 创建对象
ObjectInputStream in = new ObjectInputStream(
new FileInputStream(path)
);
// 开始反序列化
Object obj = in.readObject();
Student s = (Student) obj;
System.out.println(obj);
System.out.println(s.getName());
// 释放资源
in.close();
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
结果:
Student [name=张三, age=22]
张三