• 序列化


    【本质】让对象以流的形式进行传输。

    【实现】序列化需要实现 Serializable 或 Externalizable 接口。

    默认的序列化机制会忽略 transient 关键字修饰的属性,但自定义序列化不受 transient 影响。

    如果一个类是可序列化的,那么它的子类也是可序列化的。

    Serializable

    实现了 Serializable 接口即可进行序列化,使用默认的序列化机制。

    若想进行自定义序列化可以定义以下四个方法:

    • writeObject(反射调用)
    • readObject(反射调用)
    • writeReplace:序列化时,先 writeReplace,后 writeObject,writeReplace 方法返回的对象才是真正的序列化对象。
    • readResolve:反序列化时,先 readObject,后 readResolve,readResolve 方法返回的对象会替换反序列化对象创建的实例。

    Externalizable

    实现了 Externalizable 接口就必须实现 writeExternal 与 readExternal 两个方法,序列化完全自主控制。

    读取对象时,会调用类的无参构造去创建一个新的对象,然后再将被保存对象的属性的值分别填充到新对象中,这就是为什么必须定义一个无参构造。

    风险

    【兼容性】序列化类一旦被发布,之后一旦对类进行修改,很有可能导致序列化形式不兼容。

    【安全性】依靠默认的反序列化机制,很容易得到对象之后遭受非法访问,可以在 writeObject 方法中进行加密。

  • 相关阅读:
    整理牙刷
    color 圆盘染色
    数论の一波流[长期更新]
    生成树
    一维黑白棋
    Factorials
    平面分割问题
    poj1183 反正切函数
    烽火传递
    校门外的树
  • 原文地址:https://www.cnblogs.com/xmsx/p/9774152.html
Copyright © 2020-2023  润新知