对象流可以用来序列化对象

但是类要序列化我们需要实现接口Serializable 并且在类中增加一个静态的 static final long serialVersionUID 静态类常量
_

序列化需要满足的条件

  • 需要实现接口:Serializable
  • 当前类提供一个全局常量 serialVersionUID
  • 类中所有熟悉也都必须可序列化,(默认情况下,基本数据类型可序列化,如果是对象,对象也得做可序列化实现)

_
补充:被static和transient修饰的成员变量不能被序列化

transient 就是用来标识不需要序列化的属性,只要标识了序列化对象的时候,这个属性就不会被序列化。

我们可以使用idea帮我们自动添加这个常量,下图中打上勾
image.png
image.png_

  1. package com.daijunyi.file;
  2. import java.io.*;
  3. class Person implements Serializable{
  4. private static final long serialVersionUID = 7080081555008858362L;
  5. private String name;
  6. private Integer age;
  7. public Person(String name, Integer age) {
  8. this.name = name;
  9. this.age = age;
  10. }
  11. @Override
  12. public String toString() {
  13. return "Person{" +
  14. "name='" + name + '\'' +
  15. ", age=" + age +
  16. '}';
  17. }
  18. public String getName() {
  19. return name;
  20. }
  21. public void setName(String name) {
  22. this.name = name;
  23. }
  24. public Integer getAge() {
  25. return age;
  26. }
  27. public void setAge(Integer age) {
  28. this.age = age;
  29. }
  30. }
  31. public class ObjectInputStreamtest {
  32. public static void main(String[] args) throws IOException, ClassNotFoundException {
  33. //写对象到文件中
  34. FileOutputStream fis = new FileOutputStream("person.tmp");
  35. ObjectOutputStream oos = new ObjectOutputStream(fis);
  36. oos.writeObject(new Person("戴先生",32));
  37. oos.close();
  38. //从文件中读对象回来
  39. ObjectInputStream ois = new ObjectInputStream(new FileInputStream("person.tmp"));
  40. Person o = (Person) ois.readObject();
  41. System.out.println(o.toString());
  42. ois.close();
  43. }
  44. }