一、认识序列化
在java中,序列化就是将对象的状态存储到特定存储介质的过程,也就是将对象状态转换为可保持或可传输格式的过程。在序列化过程中,会将对象的公有成员、私有成员包括类名,转换为字节流,然后再把字节流写入数据流,存储到存储介质中,这里的存储介质通常指文件。
二、序列化保存对象信息
对象序列化的步骤可以概括分为两大步
(1)创建一个对象输出流(ObjectOutputStream),它可以包装一个其他类型的输出流,如文件输出流FileOutputStream。
FileOutputStream fos=new FileOutputStream();
ObjectOutputStream oos=new ObjectOutputStream(fos);
(2)通过对象输出流的writeObject() 方法写对象,也就是输出可序列化对象。
三、反序列化获取对象信息
反序列化就是从文件中读取数据并重新构建成对象的过程。
反序列化的步骤也可以概括为两大步:
(1)创建一个对象输入流(ObjectInputStream),它可以包装一个其他类型的输出流,如文件输入流FileInputStream。
FileInputStream fis=new FileInputStream();
ObjectInputStream ois=new ObjectInputStream(fis);
(2)通过对象输入流的readObject()方法读取对象,该方法返回一个Object类型的对象。
下面我们通过具体实例来解读序列化和反序列化
首先我们先创建一个学生类
import java.io.Serializable;
public class Student implements Serializable {
private int Id;
private String name;
public Student() {
}
public Student(int Id, String name) {
this.Id = Id;
this.name = name;
}
public int getId() {
return Id;
}
public void setId(int id) {
Id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String toString() {
return "Student{" + "Id=" + Id + ", name='" + name + '}';
}
}
注意一定要导入java.io.Serializable类,实现Serializable接口
序列化与反序列化
public class TestOBJ {
public static void main(String[] args) throws IOException, ClassNotFoundException {
ArrayList<Student> list=new ArrayList();//创建一个学生对象集合
Student s1=new Student(1,"aa");
Student s2=new Student(2,"bb");
list.add(s1);//添加学生对象
list.add(s2);
FileOutputStream fos=new FileOutputStream("01.txt");
ObjectOutputStream oos=new ObjectOutputStream(fos);
oos.writeObject(list);
FileInputStream fis=new FileInputStream("01.txt");
ObjectInputStream ois=new ObjectInputStream(fis);
Object o=ois.readObject();
System.out.println(o);
ois.close();
fis.close();
oos.close();
fos.close();
}
}
204

被折叠的 条评论
为什么被折叠?



