Serializable教程详解
Java 开发里的对象持久化,离不开序列化,Serializable 就是关键一步。Serializable-master 是一篇比较系统、讲得挺清楚的教程,尤其对 serialVersionUID
的解释,蛮适合你反复看几遍消化一下。
serialVersionUID 的作用就是保证类版本一致,尤其你升级代码但不想影响老数据的时候,管用。自动生成的虽然省事,但结构一变就容易炸。显式声明一个常量,比如:
private static final long serialVersionUID = 1L;
就能避免反序列化时报 InvalidClassException
。
序列化流程也不复杂:实现 Serializable
,用 ObjectOutputStream.writeObject()
写入数据,Java 会把对象的状态保存成字节流。像引用属性也会递归,挺智能的。
反序列化时用 ObjectInputStream.readObject()
读回来,Java 会自动去比对 serialVersionUID
,一切对得上,就能顺利恢复对象。注意静态字段和 transient
的是不会被序列化的哦。
日常开发中,建议你手动写上 serialVersionUID,尤其类结构变动频繁的场景。还有一点别忽略:反序列化过程其实有安全风险,外部数据时最好做合法性校验。
如果你正折腾分布式通信或者缓存持久化,这篇文章会帮你搞清楚底层机制,少踩坑。
下载地址
用户评论