一:序列化(ObjectOutputStream)
序列化是指把Java对象转换为字节序列的过程,即把一个对象变为二进制的数据流的一种方法,通过序列化可以方便地实现对象的传输和存储,将内存上的对象保存到文本文件中
注意事项 如果通过序列化流保存一个对象, 这个对象的额实体类必须实现序列化接口
目的:让对象是处于唯一的。 定义一个id
-
将张三的这个对象存储到D:下的文件中
- Student.java
package com.zking.test;
import java.io.Serializable;
public class Student implements Serializable{
/**
*
* 序列接口的唯一ID 让Studnet在这个项目中处于一个唯一性
*/
private static final long serialVersionUID = 1L;
private int sid;
private String name;
public Student() {
// TODO Auto-generated constructor stub
}
public Student(int sid, String name) {
super();
this.sid = sid;
this.name = name;
}
public int getSid() {
return sid;
}
public void setSid(int sid) {
this.sid = sid;
}
public String getName() {
return name;
}
public void setName(String name) {
Student stu = new Student();
stu.setSid(1);
stu.setName("张三");
//备份文件以及存储对象全部都是以.bak结尾格式
File file = new File("D:\\a.bak");
FileOutputStream fos = new FileOutputStream(file);
ObjectOutputStream oos = new ObjectOutputStream(fos);
//调用oos中的写入的方法
oos.writeObject(stu);
System.out.println("OK");
//关闭资源
oos.close();
fos.close();
二:反序列化(ObjectInputStream)
反序列化是指把字节序列恢复为Java对象的过程,将文本文件中所保存的对象读取到Java程序中,将文本文件中存储的对象读取处理
File file = new File("D:\\a.bak");
FileInputStream fis = new FileInputStream(file);
ObjectInputStream ois = new ObjectInputStream(fis);
Student stu = (Student)ois.readObject();
System.out.println(stu.getSid()+" "+stu.getName());
ois.close();
fis.close();
注意:为什么集合添加到文本文件中,不需要实现序列化接口?
因为集合本身已经实现了,保存多个 使用集合的方式进行存储
List<Student> list = new ArrayList<Student>();
for (int i = 1; i <= 100; i++) {
list.add(new Student(i+1, "张三"+i));
}
集合实现方式:
File file = new File("D:\\李白.bak");
FileOutputStream fos = new FileOutputStream(file);
BufferedOutputStream bos = new BufferedOutputStream(fos);
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(list);
oos.close();
bos.close();
fos.close();
File file = new File("D:\\李白.bak");
FileInputStream fis = new FileInputStream(file);
BufferedInputStream bis = new BufferedInputStream(fis);
ObjectInputStream ois = new ObjectInputStream(bis);
List<Student> list = (List<Student>)ois.readObject();
for (Student student : list) {
System.out.println(student.getSid()+" "+student.getName());
}