对象的序列化与反序列化
序列化?What it is?
对象序列化就是把一个对象变为二进制的数据流的一种方法,简单来说就是把一个对象变为二进制数据,从而支持对对象数据流进行操作的一种方法。
序列化分为序列化操作和反序列化操作。序列化操作是将对象转化为二进制信息数据,反序列化操作是将二进制信息数据转换为对象的操作。
需要进行序列化或反序列化的类需要实现Serializable接口,此接口为标识接口,无任何抽象方法或常量,直接继承即可。
在对对象信息进行读写时,需要使用到ObjectOutputStream类的一些方法和ObjectInputStream类的一些方法。
图解序列化
序列化的操作
序列化和反序列化过程
案例演示(序列化和反序列化操作)
测试类中有序列化和反序列化方法
package chapter_twelve;
import jdk.internal.util.xml.impl.Input;
import java.io.*;
//定义实现Serializable接口的类
class Person implements Serializable {
private String name; //定义姓名
private int age; //定义年龄
public Person(){} //定义含参和无参的构造方法
public Person(String name, int age) {
this.name = name;
this.age = age;
}
//定义setter和getter方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
//覆写toString方法
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
//测试类
public class SerializableDemo01 {
public static void main(String[] args) throws Exception {
File file = new File("D:" + File.separator + "test.txt");
Serializable(file,new Person("张三",22));
DeSerializable(file);
}
/**
* 定义对象序列化的方法,将对象流写入文件
* @param file //文件对象
* @param object //待写入对象
* @throws Exception
*/
public static void Serializable(File file, Object object) throws Exception{
OutputStream outputStream = new FileOutputStream(file); //实例化输出流对象
ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream); //实例化对象输出流
objectOutputStream.writeObject(object); //将对象写入文件
objectOutputStream.close(); //关闭对象输出流
outputStream.close(); //关闭输出流
}
/**
*定义对象反序列化的方法,将对象从文件中读出并输出
* @param file //文件对象
* @throws Exception
*/
public static void DeSerializable(File file) throws Exception {
InputStream inputStream = new FileInputStream(file); //实例化输入流对象
ObjectInputStream objectInputStream = new ObjectInputStream(inputStream); //实例化对象输入流
Object object = objectInputStream.readObject(); //读取文件中的对象信息
System.out.println(object); //调用对象的toString方法输出对象的基本信息
objectInputStream.close(); //关闭对象输入流
inputStream.close(); //关闭输入流
}
}
运行之前(无test.txt文件产生)
运行之后
文件截图(对象信息已被写入文件)
项目结果(又从文件中将信息读取出来打印)
小结
这就是对象序列化的基本概念和基本应用哦,小伙伴们如果感兴趣,可以再了解一下Externalizable接口、transient关键字等知识哦~