04序列化

序列化

基础知识

  • 静态变量是不会被序列化的,因为序列化针对的是对象,而静态变量属于是类变量
  • 被transient 关键字修饰的变量或者被@transient修饰的方法无法进行序列化及反序列化,
  • 如果反序列化的类中定义了writeObject和readObject方法,那么虚拟机会试图调用对象类中的writeObject方法和readObject方法来进行用户自定义的序列化和反序列化操作。
    • ArryList用到了这种序列化方式,实际上是个动态数组,每次在放满之后自动增长设定的长度值,如果数组自动增长的长度为100,而实际只放了1个元素,那么就会序列化99个null元素。为了保证不会对这么多null元素同时进行序列化,故把元素数组设置为transient。
    • 总的来说,为了防止一个包含大量空对象的数组被序列化,以及优化存储,所以使用transient来声明数组。
  • 序列化时会判断被序列化的类是否是Enum,Array和Serializable类型,如果不是则直接抛出NotSerializableException。

serialVersionUID

  • serial Version UID主要是为了验证版本一致性的。

04序列化
https://x-leonidas.github.io/2023/01/16/04Java/java基础/04序列化/
作者
听风
发布于
2023年1月16日
更新于
2023年1月17日
许可协议