外观
一句话答案
序列化将对象转为字节流用于传输/存储,Java 用 Serializable 接口,生产推荐 JSON 或 Protobuf(跨语言、更高效)。
核心要点
Java序列化: 实现Serializable + serialVersionUID
方案对比:
| 方案 | 速度 | 体积 | 跨语言 |
|---|---|---|---|
| Java原生 | 慢 | 大 | 否 |
| JSON | 中 | 中 | 是 |
| Protobuf | 快 | 小 | 是(推荐) |
追问与易错
追问方向:
- serialVersionUID 有什么作用?(版本兼容性校验,不一致反序列化失败)
- transient 关键字的作用?(标记字段不参与序列化)
- 为什么推荐 Protobuf/JSON 而非 Java 原生序列化?(跨语言/体积小/安全性)
易错点:
- ❌ 不声明 serialVersionUID——JVM 自动计算,类修改后反序列化失败
- ❌ Java 原生序列化存在安全漏洞(反序列化攻击)——生产环境应避免
💡 记忆锚点
序列化就是把活对象冻成字节冰棍(传输/存储),反序列化再解冻复活。Java原生又慢又胖又不跨语言,生产环境用Protobuf(小快跨语言)或JSON(可读性好)。别忘serialVersionUID这张身份证,丢了解冻会认不出。