序列化是一个用于将对象状态转换为字节流的过程。需要使用对象输出流ObjectOutputStream。
简单的说:我们使用new关键字创建在内存中的对象,包括对象中的所有数据,持久性的保存到硬盘上,通常是文件中,对象 —> 文件
反序列化则是从特定的流中获取数据重新构建对象的过程 。需要使用对象输入流ObjectInputStream。保存在文件中的对象通过反序列化的手段从新加载到内存中
对象的序列化主要有两种用途:
1.把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;
2.在网络上传送对象的字节序列。
在很多应用中,需要对某些对象进行序列化,让它们离开内存空间,入住物理硬盘,以便长期保存。比如最常见
的是Web服务器中的Session对象,当有 10万用户并发访问,就有可能出现10万个Session对象,内存可能吃不
消,于是Web容器就会把一些seesion先序列化到硬盘中,等要用了,再把保存在硬盘中的对象还原到内存中。
注意:
1:序列化和反序列化都是基于二进制流的,也就是说,在信息转化为二进制存储在文件中之后,用文本编辑器打
开查看的话,肯定是会出现乱码的。只有通过反序列化才能将存储的二进制读取出来,然后正常显示在控制台上。
2:如果一个对象要实现序列化的话,则这个类必须要实现一个序列化的接口
实现序列化:序列化是写的过程
实现反序列化:反序列化是读的过程
测试
package homework1;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.ObjectInput;
import java.io.ObjectInputStream;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
public class Demo {
public static void main(String[] args) throws Exception {
// 创建学员对象
Student student = new Student();
// 赋值
student.setName("加菲");
student.setSex("男");
// 序列化
// 构建对象输出流,为序列化做准备
FileOutputStream fos = new FileOutputStream("D:/Bandzip/student.txt");
ObjectOutput oos = new ObjectOutputStream(fos);
oos.writeObject(student);
// 反序列化
// 构建对象输入流,为反序列化做准备
FileInputStream fis = new FileInputStream("D:/Bandzip/student.txt");
ObjectInput ois = new ObjectInputStream(fis);
Student student1 = (Student)ois.readObject();
System.out.println("反序列化:name:"+student1.getName()+"--"+"sex:"+student1.getSex());
// 关闭流
oos.close();
fos.close();
ois.close();
fis.close();
}
}
类
package homework1;
import java.io.Serializable;
public class Student implements Serializable {
private String name;
private String sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String toString() {
return "Student [name=" + name + ", sex=" + sex + "]";
}
public Student() {
super();
}
public Student(String name, String sex) {
super();
this.name = name;
this.sex = sex;
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)