利用序列化流将一个对象的整体转换为二进制的数据,并且存储到文件中,将对象永久的存入一个文件,叫做序列化,读取的过程叫做反序列化。

    对象是需要封装的,为了实现对象的序列化,我们将对象实现了一个序列化接口—Serializable

    这个接口中没有方法,就是一个规范,只要实现了这个接口,那么序列化的时候就不会出现问题

    序列化版本号:序列化ID(serialVersionUID),用于记录对象的类型,每个被序列化的操作对象操作其对象的ID与接收类型的ID必须一致。序列化的ID和反序列化的ID必须一致

    序列化流:
    ObjectOutputStream:序列化流(对象输出流)
    -public final void writeObject(object obj)

    image.png

    反序列化流:
    ObjectInputStream:反序列化流(对象输入流)
    -public final Object readObject()
    image.png

    封装一个开发级别的实体类(标准的)
    1、必须实现序列化接口—声明UID
    2、属性私有化,并且声明get/set
    3、声明有参数和无参数构造函数
    4、重写hashCode和equals方法
    5、重写toString方法

    扩展
    transient关键字在序列化的使用:是一个修饰符,被修饰的属性可以在序列化中被忽略。在某些特定业务会用到。

    image.png

    打印流(自动刷新流):只有输出流,没有输入流!!!
    printStream:字节打印流,调用println方法自动刷新
    printWriter:字节打印流,指定自动化刷新关闭后,调用println方法自动刷新(自带回车),无需手动调用flush方法

    在网络传输中使用比较多

    image.png

    image.png