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不要给我们自动设置了,另外要注意这行属性,除了属性值随意,前面的修饰符、变量名,一个也不要缺少,一个也不要变