Java序列化

2024-07-05 13:22:49 浏览数 (2)

什么是序列化,如何实现序列化

概述

  • Java序列化是指将Java对象转换为二进制字节流,以便于持久化和传输的过程。反之,则称为反序列化
  • 默认的序列化实现由JVM负责,可序列化的对象需要实现Serializable接口
  • Serializable接口不包含任何方法,只用于标记该对象可序列化;若未实现该接口,则序列化时会报NotSerializableException异常

自定义序列化方式

  1. 在对象中重写 writeObject 和 readObject 方法
  2. 实现Externalizable接口

serialVersionUID常数

  • 该常数用于指定对象的版本,反序列化时会检查版本是否改变,若改变则会报错
  • 建议显示赋值该常量,否则jvm会根据对象属性、方法等自动生成,若序列化前后对象有变化,则版本号会重新生成,反序列化时就会抛异常

Externalizable

  • Externalizable 序列化的优先级比Serializable的优先级高
  • 使用 Externalizable 进行序列化时,必须要有默认的构造方法,而Serializable可以没有默认的构造方法。 这是因为使用 Externalizable 进行反序列化时,需要有默认的构造方法,通过反射先创建出该类的实例,然后再把解析后的属性值,通过反射赋值

其他注意事项

  • 静态变量不会被序列化
  • transient 关键字修饰的属性不会被序列化
  • Serializable反序列化时不会调用构造方法

参考文献

https://cloud.tencent.com/developer/article/1655892

https://cloud.tencent.com/developer/article/1130025

https://www.baeldung.com/java-serialization

https://www.baeldung.com/java-externalizable

0 人点赞