JavaBase-IO流-对象流
发布日期:2021-04-30 21:05:43 浏览次数:132 分类:精选文章

本文共 6271 字,大约阅读时间需要 20 分钟。

????Object Stream??Java??????????????Java????????????????????????????????????????????????

1. ??????

?????????ObjectInputStream?ObjectOutputStream??????????????????????????????Java???????????????????????????

????????

??????????????????Java??????????????????ObjectOutputStream??????????????ObjectInputStream??????????????????????????????????Serializable???????????NoSerializableException???

????

  • ?????ObjectOutputStream?ObjectInputStream???????????????????????????????
  • transient?????transient?????????????????????????????????int?0?Object?null??

2. ???????

???????????????????Serializable???????????????????????????????????

??????

  • ??????????????????????Java???????????
  • ???????????????????????????????????????
  • ???????????????????????????????????

????????

??????????????????

  • ???????????Serializable????????????????????NotSerializableException???
  • ???????????serialVersionUID???????????????????????????????????serialVersionUID?JVM????????????????
  • ????????????????????????????int?String???????????????????????Serializable???????????
  • 3. ??????

    ??????

    ???????????????????

    import java.io.*;
    import java.io.Serializable;
    public class TestObjectStream {
    public static void main(String[] args) throws IOException {
    // ?????
    ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("data.obj"));
    String data = "Hello, World!";
    oos.writeObject(data);
    oos.flush();
    oos.close();
    // ??????
    ObjectInputStream ois = new ObjectInputStream(new FileInputStream("data.obj"));
    Object obj = ois.readObject();
    System.out.println((String) obj); // ?? "Hello, World!"
    ois.close();
    }
    }

    ???????ObjectOutputStream????"Hello, World!"??????????ObjectInputStream?????????????????

    ????????

    ???????????????????????????????????Serializable????????

    public class Person implements Serializable {
    private static final long serialVersionUID = 123456789012345678L;
    private String name;
    private int age;
    public Person(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 "Person{" + "name=" + name + ", age=" + age + '}';
    }
    }

    ????????????????????????Address??????????Serializable???

    4. ???????

    ?????????

    ???A??B??serialVersionUID?????????????InvalidClassException??????

    • A????serialVersionUID?7246350247175365830L
    • B????serialVersionUID?7346350247175365830L

    ??????JVM?????serialVersionUID??????????????

    ????????

    ??A??????????B????????????????????????????

    • A???????
      public class Person implements Serializable {
      private static final long serialVersionUID = 7346350247175365830L;
      private String name;
      private int age;
      private int sex;
      }
    • B???????
      public class Person implements Serializable {
      private static final long serialVersionUID = 7346350247175365830L;
      private String name;
      private int age;
      }

    ??????????

    Person{name=???????, age=123}

    ???sex???????

    ?????????

    ??B????serialVersionUID??????????????????????????????

    • A???????
      public class Person implements Serializable {
      private static final long serialVersionUID = 7346350247175365830L;
      private String name;
      private int age;
      }
    • B???????
      public class Person implements Serializable {
      private static final long serialVersionUID = 7346350247175365830L;
      private String name;
      private int age;
      private int sex;
      }

    ??????????

    Person{name=???????, age=123, sex=0}

    ???sex?????????????????0?

    5. ???transient?????

    ????

    ???????ObjectOutputStream?ObjectInputStream????????????

    public class TestStatic implements Serializable {
    private static final long serialVersionUID = -4662715330378065625L;
    public static int ver = 123;
    public transient String aa;
    public static void main(String[] args) throws IOException {
    TestStatic test = new TestStatic();
    test.setAa("dfadfasdf");
    ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("test.obj"));
    oos.writeObject(test);
    oos.flush();
    ObjectInputStream ois = new ObjectInputStream(new FileInputStream("test.obj"));
    Object obj = ois.readObject();
    if (obj instanceof TestStatic) {
    TestStatic test = (TestStatic) obj;
    System.out.println(test.getVer()); // ?? 123
    System.out.println(test.getAa()); // ?? "dfadfasdf"
    }
    }
    public int getVer() {
    return ver;
    }
    public void setVer(int ver) {
    TestStatic.ver = ver;
    }
    public String getAa() {
    return aa;
    }
    public void setAa(String aa) {
    this.aa = aa;
    }
    @Override
    public String toString() {
    return "TestStatic{" + "ver=" + ver + ", aa='" + aa + '\'' + '}';
    }
    }

    ??????ver????123??aa???null???transient?????????

    transient??

    transient???????????????????????????

    public class TestTransient implements Serializable {
    private static final long serialVersionUID = -4662715330378065625L;
    public transient String aa;
    public static void main(String[] args) throws IOException {
    TestTransient test = new TestTransient();
    test.setAa("dfadfasdf");
    ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("test.obj"));
    oos.writeObject(test);
    oos.flush();
    ObjectInputStream ois = new ObjectInputStream(new FileInputStream("test.obj"));
    Object obj = ois.readObject();
    if (obj instanceof TestTransient) {
    TestTransient test = (TestTransient) obj;
    System.out.println(test.getAa()); // ?? null
    }
    }
    public String getAa() {
    return aa;
    }
    public void setAa(String aa) {
    this.aa = aa;
    }
    @Override
    public String toString() {
    return "TestTransient{" + "aa='" + aa + '\'' + '}';
    }
    }

    ??????aa???null???????transient???

    6. ??

    ????Java??????????????????????????????ObjectInputStream?ObjectOutputStream??????????Java???????????????????????????????????????serialVersionUID????????static?transient??????????????????????

    上一篇:Leetcode--416. 分割等和子集
    下一篇:JAVAWEB——(servlet-6)

    发表评论

    最新留言

    做的很好,不错不错
    [***.243.131.199]2026年06月15日 12时21分22秒