Object流使用

31 阅读2分钟

Object流是IO流中的一种高级实现流,可以把程序中的javaBean对象信息写入/读取到本地文件中,更重要的是,保存到本地文件中的信息是密文

一、使用

创建一个学生类,需要注意的是,该类需要实现Serializable(可序列化)接口,表示该javaBean可以被Object流使用

import java.io.Serializable;

/**
 * 学生类,需要实现Serializable(可序列化)接口,表示该javaBean可以被Object流使用
 */
public class Student implements Serializable {
    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 +
                '}';
    }
}

1、写入到本地

	// 创建javaBean对象
	Student student = new Student("张三", 20);
	
	// 创建ObjectOutputStream流对象
	ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("student.txt"));
	
	// 写入javaBean对象到本地文件中
	oos.writeObject(student);
	
	// 关闭流,释放资源
	oos.close();

在这里插入图片描述

2、从本地读取

	// 创建ObjectInputStream流对象
	ObjectInputStream ois = new ObjectInputStream(new FileInputStream("student.txt"));
	
	// 将本地的javaBean文件内的对象信息读取出来,强制转换为Student类
	Student s = (Student) ois.readObject();
	
	// 关闭流,释放资源
	ois.close();
	
	// 打印读取出来的javaBean信息
	System.out.println(s);

在这里插入图片描述

二、注意事项

需要注意的是,需要序列化的javaBean除了需要实现Serializable(可序列化)接口外,还应该给该类设置一个序列化版本ID,属性值随意。

private static final long serialVersionUID = 1L

之所以加这个属性,是因为JVM在运行程序时,会给我们的javaBean自动设置一个这样的序列化版本ID。我们把javaBean写入到本地文件里后,如果程序里的javaBean成员发生改变了,JVM会重新给该javaBean自动设置一个序列化版本ID,当读取本地Object信息时,JVM会检查写入/读取俩javaBean的序列化版本ID,不一致时会报下面这个错误。 在这里插入图片描述 给javaBean设置了这个属性后,表示使用我们设置的这个序列化版本ID,告诉JVM不要给我们自动设置了,另外要注意这行属性,除了属性值随意,前面的修饰符、变量名,一个也不要缺少,一个也不要变

首次发布

hezhongying.blog.csdn.net/article/det…