Java-IO流-对象流操作自定义类对象

Java-IO流-对象流操作自定义类对象

  • 对象流可以将内存中的对象序列化写入本地文件中,也可以从本地文件中反序列化读取对象到内存中
  • 但是,对于自定义类来说,想要实现序列化,必须要实现Serializable接口
  • 如果没有实现Serializable接口的类在进行序列化的时候会出没有序列化异常 NotSerializableException
  • Serializable接口是一个标记接口,接口中没有属性和方法
public interface Serializable {
}
  • 序列化的细节:
    • 被序列化的类的内部的所有属性,必须是可序列化的
    • 基本数据类型都是可序列化的
    • static,transient修饰的属性 不可以被序列化
  • IDEA自动生成序列化版本号的配置

示例:

  • 首先,先准备一个自定义类
public class Person implements java.io.Serializable{
    // 属性
    private int age;
    private String name;
    // set get 方法
    public int getAge() {
        return age;
    }

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

    public String getName() {
        return name;
    }

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

    // 构造器
    public Person() {
    }

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

    // 重写toString方法

    @Override
    public String toString() {
        return "Person{" +
                "age=" + age +
                ", name='" + name + '\'' +
                '}';
    }
}
  • 然后使用对对象进行序列化与发序列化
public class Test01 {
    // 这是main方法,实现程序主要逻辑
    public static void main(String[] args) throws IOException {
        // 序列化 将内存中的对象写入文件中
        // 创建Person对象
        Person p1 = new Person(19, "lili");
        // 输出对象流
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File("E:\\Study\\java_train_code\\JavaSE基础\\demo4.txt")));
        // 输出
        oos.writeObject(p1);
		// 输入对象流
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File("E:\\Study\\java_train_code\\JavaSE基础\\demo4.txt")));

        // 读取到内存中
        Person p1 = (Person)(ois.readObject());
        System.out.println(p1);
        // 关闭流
        ois.close();
        oos.close();
    }
}
posted @ 2021-01-15 21:34  殃奕  阅读(181)  评论(0编辑  收藏  举报