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("序列化完成了~~");@Overridepublic 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;