对象字节输出流ObjectOutputStream可以把对象存储到文件中
// 创建一个学生对象Student s=new Student("18","xxx",25,"3班");// 对象序列化ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("src/d1.txt"));// 直接调用序列化oos.writeObject(s);// 释放资源oos.close();
对象字节输入流ObjectInputStream把文件中的对象数据,恢复成内存中的Java对象
// 1、创建对象字节输入流管道包装低级的字节输入流管道ObjectInputStream ois = new ObjectInputStream(new FileInputStream("src/d1.txt"));// 2、调用对象字节输入流的反序列化方法Student s = (Student) ois.readObject();System.out.println(s);
需要设置序列化接口implements Serializable
package xuexi.variable;import java.io.Serializable;import java.util.Objects;public class Student implements Serializable { //私有变量 private String num; private String name; private int age; private transient String className; //transient表示不参与序列化 public Student() { } public Student(String num, String name, int age, String className) { this.num = num; this.name = name; this.age = age; this.className = className; } @Override public String toString() { return "Student{" + "num='" + num + '\'' + ", name='" + name + '\'' + ", age=" + age + ", className='" + className + '\'' + '}'; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Student student = (Student) o; return age == student.age && Objects.equals(num, student.num) && Objects.equals(name, student.name) && Objects.equals(className, student.className); } @Override public int hashCode() { return Objects.hash(num, name, age, className); } public String getNum() { return num; } public void setNum(String num) { this.num = num; } 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; } public String getClassName() { return className; } public void setClassName(String className) { this.className = className; }}