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序列化/