1,做了一个控制台版的学生管理系统,通过Scanner输入学生信息,进行增改删查操作。但是每次运行程序都需要输入学生信息,很麻烦,就想到了序列化与反序列化。
2,什么是序列化与反序列化
java序列化是指把java对象转化为字节序列的过程,而java反序列化是指把字节序列恢复为java对象的过程.
3,我们在退出系统之前,将系统现存的所有对象序列化成字节序列放到磁盘中,做持久化保存。以后用到时就从磁盘读出来。
4,我们在运行系统时,将磁盘中的字节序列反序列化成对象放到程序中。这样两个过程就实现了对象的持久化管理。
package util;
import java.io.*;
//序列化与反序列化工具类
public class Serial {
//序列化对象到磁盘中,ArrayUtil是装对象的容器,相当于ArrayList,str是磁盘路径
public void SerialToFile(ArrayUtil au,String str)throws IOException{
//获取到输出流
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(str));
if(au != null && str != null) {
//迭代出容器中的对象,并写入到输出流中
for(int i = 0;i<au.size();i++) {
oos.writeObject(au.get(i));
}
oos.close();
}
}
//反序列化方法,str是磁盘路径,从该路径下获取对象数据,ArrayUtil用于装反序列化后得到的对象
public ArrayUtil DeSerialToProgram(String str,ArrayUtil arr){
try {
FileInputStream fileInputStream = new FileInputStream(str);
ObjectInputStream ois = new ObjectInputStream(fileInputStream);
//available()方法是获取到文件中剩余字节数,只要字节数不为0,就可以循环读出所有对象
System.out.println(fileInputStream.available());
while (fileInputStream.available()>0){
//循环迭代出所有的对象,并装入ArrayUtil中
arr.add(ois.readObject());
}
}catch (IOException e){
System.out.println("读到文件末尾了");
}catch (ClassNotFoundException e){
System.out.println("未找到该文件");
}
return arr;
}
}