序列化流、打印流

1.1 对象序列化和反序列化概述

  • 序列化流的作用:
  1. 可以直接将对象保存到文件中
  2. 可以直接从文件中读取对象
  • 序列化流的分类:
  1. ObjectOutputStream:对象输出流
  2. ObjectInputStream:对象输入流
  • 对象的序列化:
  1. 将对象以流的形式保存到文件中的过程称为对象的序列化。
  2. 实现对象序列化操作需要使用对象输出流:ObjectOutputStream
  • 对象序列化注意事项:
  1. 对象序列化操作只会保存对象相关的数据,属于类的数据不会被保存,因为static修饰的成员变量是属于的,所以在保存对象时静态成员变量的值不会被保存

 1.2 ObjectOutputStream类

  • ObjectOutputStream类构造方法:
  1. ObjectOutputStream(OutputStream out):根据字节输出流创建对象输出流对象。
  • ObjectOutputStream类成员方法:
  1. void writeObject(Object obj):保存对象到流关联的文件中。
public class Student {
    private String name;
    private int age;

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}




import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;

public class ObjectOutputStreamDemo01 {
    public static void main(String[] args) throws Exception {
        //创建学生对象
        Student stu = new Student("马云",18);

        //创建对象输出流对象
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("H:/stu.txt"));
        //将对象保存到流关联的目标文件中
        oos.writeObject(stu);
        //关闭流释放资源
        oos.close();
    }
}

 

错误原因:java.io.NotSerializableException 对象不支持序列化操作

Serializable接口概述:

  • 是一个标记性接口,只要实现了该接口就具备序列化能力。
  • 只有实现了该接口的类的对象才可以通过输出流保存到文件中。

解决方案:实现Serializable接口


 2.1 反序列化

 一旦类实现了Serializable接口,每当类重新编译系统都会为类随机生成一个序列号
    序列号是一个长整型的数据。

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.ObjectInputStream;

public class ObjectInputStreamDemo01 {
    public static void main(String[] args) throws Exception {
        //创建对象输入流对象
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("H:/stu.txt"));

        //读取对象数据
        Student stu = (Student) ois.readObject();
        System.out.println(stu);
        //关闭流
        ois.close();
    }
}

未完,待续...... 

猜你喜欢

转载自blog.csdn.net/Huangyuhua068/article/details/81604631