1、对象序列化
- 作用:以 内存 为基准,把内存中的对象存储到磁盘文件中去,称为对象序列化
- 使用到的流是对象字节输出流:ObjectOutputStream
package com.csdn.d7_serializable;
import java.io.*;
public class ObjectOutputStreamDemo1 {
public static void main(String[] args) throws IOException {
//1.创建学生对象
Student s = new Student("小明", "xm", "123456", 21);
//2.对象序列化:使用对象字节输出流包装字节输出流管道
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("src\\csdn.txt"));
//3.直接调用序列化方法
oos.writeObject(s);
//4.释放资源
oos.close();
System.out.println("序列化完成了~~");
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", loginName='" + loginName + '\'' +
", passWord='" + passWord + '\'' +
", age=" + age +
'}';
}
}
}
//对象如果要序列化,必须实现Serializable序列化接口
class Student implements Serializable {
private String name;
private String loginName;
private String passWord;
private int age;
public Student(String name, String loginName, String passWord, int age) {
this.name = name;
this.loginName = loginName;
this.passWord = passWord;
this.age = age;
}
}
构造器 | 说明 |
---|
public ObjectOutputStream(OutputStream out) | 把低级 字节 输出流 包装 成高级的对象 字节 输出流 |
方法名称 | 说明 |
---|
public final void writeObject(Object obj) | 把 对象 写出去到对象序列化流的文件中去 |
- 为了好展示,我把序列化的文本换行了,反序列化的时候,不能换行,否则会报错 :Exception in thread "main" java.io.StreamCorruptedException: invalid stream header: EFBFBDEF
2、对象序列化的含义是什么?
3、对象序列化用到了哪个流?
- 对象字节输出流 ObjectOutputStream
- public final void writeObject(Object obj)
4、序列化对象的要求是怎么样的?
1、对象反序列化
- 使用到的流是对象字节输入流:ObjectInputStream
- 作用:以内存为基准,把存储到 磁盘 文件中去的对象数据恢复成 内存 中的对象,称为对象反序列化
package com.csdn.d7_serializable;
import java.io.*;
public class ObjectInputStreamDemo2 {
public static void main(String[] args) throws IOException, ClassNotFoundException {
//1.创建对象字节输入流管道包装低级的字节输入流管道
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("src\\csdn.txt"));
//2.调用对象字节输入流的反序列化方法
Student s = (Student) ois.readObject();
System.out.println(s);
//Student{name='小明', loginName='xm', passWord='123456', age=21}
}
}
构造器 | 说明 |
---|
public ObjectInputStream(InputStream out) | 把 低级 字节流输入流 包装 成 高级 的对象字节输入流 |
方法名称 | 说明 |
---|
public final Object readObject() | 把存储到 磁盘 文件中去的 对象 数据恢复成 内存 中的 对象 返回 |
2、对象反序列化的含义是什么?
3、对象反序列化用到了哪个流?
- 对象字节输入流ObjectInputStream
- public final Object readObject()
4、 密码不参与序列化的操作步骤
private String name;
private String loginName;
//transient修饰的成员变量不参与序列化
private transient String passWord;
private int age;
- Student { name = ' 小明 ' , loginName = ' xm ' , passWord = ' null ' , age = 21 }
//声明序列化的版本号码
//序列化的版本号与反序列化的版本号必须一致才不会出错!
private static final long serialVersionUID = 1;
private String name;
private String loginName;
//transient修饰的成员变量不参与序列化
private transient String passWord;
private int age;