对象字节输出流ObjectOutputStream可以把对象存储到文件中

  1. // 创建一个学生对象
  2. Student s=new Student("18","xxx",25,"3班");
  3. // 对象序列化
  4. ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("src/d1.txt"));
  5. // 直接调用序列化
  6. oos.writeObject(s);
  7. // 释放资源
  8. oos.close();

对象字节输入流ObjectInputStream把文件中的对象数据,恢复成内存中的Java对象

  1. // 1、创建对象字节输入流管道包装低级的字节输入流管道
  2. ObjectInputStream ois = new ObjectInputStream(new FileInputStream("src/d1.txt"));
  3. // 2、调用对象字节输入流的反序列化方法
  4. Student s = (Student) ois.readObject();
  5. System.out.println(s);

需要设置序列化接口implements Serializable

  1. package xuexi.variable;
  2. import java.io.Serializable;
  3. import java.util.Objects;
  4. public class Student implements Serializable {
  5. //私有变量
  6. private String num;
  7. private String name;
  8. private int age;
  9. private transient String className; //transient表示不参与序列化
  10. public Student() {
  11. }
  12. public Student(String num, String name, int age, String className) {
  13. this.num = num;
  14. this.name = name;
  15. this.age = age;
  16. this.className = className;
  17. }
  18. @Override
  19. public String toString() {
  20. return "Student{" +
  21. "num='" + num + '\'' +
  22. ", name='" + name + '\'' +
  23. ", age=" + age +
  24. ", className='" + className + '\'' +
  25. '}';
  26. }
  27. @Override
  28. public boolean equals(Object o) {
  29. if (this == o) return true;
  30. if (o == null || getClass() != o.getClass()) return false;
  31. Student student = (Student) o;
  32. return age == student.age &&
  33. Objects.equals(num, student.num) &&
  34. Objects.equals(name, student.name) &&
  35. Objects.equals(className, student.className);
  36. }
  37. @Override
  38. public int hashCode() {
  39. return Objects.hash(num, name, age, className);
  40. }
  41. public String getNum() {
  42. return num;
  43. }
  44. public void setNum(String num) {
  45. this.num = num;
  46. }
  47. public String getName() {
  48. return name;
  49. }
  50. public void setName(String name) {
  51. this.name = name;
  52. }
  53. public int getAge() {
  54. return age;
  55. }
  56. public void setAge(int age) {
  57. this.age = age;
  58. }
  59. public String getClassName() {
  60. return className;
  61. }
  62. public void setClassName(String className) {
  63. this.className = className;
  64. }
  65. }