美文网首页java复习
2020-07-08对象序列化流

2020-07-08对象序列化流

作者: 智障猿 | 来源:发表于2020-07-08 17:14 被阅读0次

    对象序列化流

    • 概述:
      就是将对象保存到磁盘中,或者在网络中传输对象。这种机制就是使用一个字节序列表示一个对象,该字节序列包含:对象的类型,对象的数据和对象中存储的属性等信息。字节序列写到文件之后,相当于文件中持久保存了一个对象信息,反之,该字节序列还可以从文件中读取出来,重构对象,对他进行反序列化
    • 要实现序列化和反序列化就要使用对象序列流和对象反序列流
      ①对象序列流:ObjectOutputStream
      ②对象反序列流:ObjectInputStream

    ObjectOutputStream对象序列流

    构造方法 说明
    ObjectOutputStream(OutputStream out) 创建一个写入指定的OutputStream的ObjectOutputStream
    方法 说明
    writeObject(Object obj 将指定对象写入ObjectOutputStream
    • 注意:
      ①一个对象要是想要被序列化,该对象所属的类必须实现Serializable接口
      ②Serialzable是一个标记接口,实现该接口,不需要重写任何方法

    ObjectInputStream对象反序列化流

    构造方法 说明
    ObjectInputStream(InputStream in) 创建从指定的InputStream读取的ObjectInputStream
    方法 说明
    Object readObject() 从ObjectInputStream读取一个对象
            //对象序列化
            ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream("test\\Student.txt"));
            Student student =new Student("zzt",18);
            objectOutputStream.writeObject(student);
            //反序列化
            ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream("test\\Student.txt"));
            Object o = objectInputStream.readObject();
            Student student1 = (Student)o;
            System.out.println(student1);
    

    出现的问题及解决方法

    1. 用对象序列化流序列化了一个对象后,假如我们修改了对象所属的类文件,读取数据会不会出问题?
    • 会出问题,抛出InvalidClassException异常
    1. 如果出问题了,如何解决
    • 给对象所属的类加一个serialVersionUID
      prvate static final long serialVersionUID = 42L;
    1. 如果一个对象中的某个成员变量的值不想被序列化,如何实现呢?
    • 给该成员变量加transient关键字修饰,该关键字标记的成员变量不参与序列化过程。

    相关文章

      网友评论

        本文标题:2020-07-08对象序列化流

        本文链接:https://www.haomeiwen.com/subject/emuqcktx.html