zoukankan      html  css  js  c++  java
  • 序列化

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

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

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

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

    Serializable

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

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

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

    Externalizable

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

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

    风险

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

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

  • 相关阅读:
    第一模块第一章 review
    python练习题:三级菜单
    python list()总结
    python中index()、find()方法
    python中join()函数、list()函数补充的用法
    python中关键字的总结
    python中for循环的用法
    python中range()、list()函数的用法
    python中pop()函数的用法
    python中split()、os.path.split()函数用法
  • 原文地址:https://www.cnblogs.com/xmsx/p/9774152.html
Copyright © 2011-2022 走看看