Serializable

Serializable是 Java 中用于对象序列化的接口。序列化是将对象的状态转换为字节流的过程,以便存储或传输。反序列化则是将字节流恢复为对象的过程。

Serializable 接口没有任何方法或字段,仅用于标识一个类的对象是可序列化的,实现了Serializable接口的类可以被ObjectOutputStream转换为字节流,同时也可以通过ObjectInputStream再将其解析为对象(前提实现 Serializable 接口)。

复制代码
// 序列化
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("user.ser"));
out.writeObject(user);
out.close();

// 反序列化
ObjectInputStream in = new ObjectInputStream(new FileInputStream("user.ser"));
User user = (User) in.readObject();
in.close();

什么时候需要实现呢?

序列化的场景就是当你需要保存对象,或者通过网络把对象传输到其他地方的时候,类必须实现 Serializable 才能将其对象序列化为字节流。

private static final long serialVersionUID = 1L;

serialVersionUID 是用于验证序列化和反序列化过程中类的一致性。JVM在反序列化时会比较传入字节流中的serialVersionUID与本地类的serialVersionUID,如果一致则认为是兼容的,可以进行反序列化,否则会抛出 InvalidClassException 异常。

定义 private static final long serialVersionUID = 1L; 可以确保类在版本变化时的兼容性,避免反序列化时出现版本不一致的错误。显式定义serialVersionUID是一个良好的编程实践,特别是在需要频繁序列化和反序列化的场景中。

相关推荐
Flynn Liang6 小时前
Spring AI 2.0 深度解析:ChatClient、Advisor 链与 MCP——Java 工程师的 AI 落地最优解
java·人工智能·spring·大模型·架构设计·spring ai
灿飞7 小时前
Kotlin与Java虚拟机六:基础与类型系统:一切皆对象,但对象有代价
java·kotlin
计算机毕设定制辅导-无忧学长7 小时前
《基于微信小程序健康习惯激励系统设计与实现》
java·spring boot·mysql·微信小程序·uniapp·健康习惯激励系统
雪芽蓝域zzs8 小时前
第 1 章:IDEA 创建 SpringBoot3.5.16 Maven 项目
java·maven·intellij-idea
golang学习记8 小时前
IDEA 开始换芯,发布全新AI版终端
java·人工智能·intellij-idea
vipxieliang8 小时前
ValidX 正则表达式预编译优化:Pattern 复用策略
java·spring boot·后端
Wang's Blog8 小时前
Java 项目实战:交友项目 - FastDFS 工作原理
java·大数据·交友
Wang's Blog8 小时前
Java 项目实战:交友项目 - 保存访客记录
java·开发语言·交友
liangbo78 小时前
Spring系列01:IoC 与 DI 到底解决了什么
java·spring
江湖中的阿龙8 小时前
Oracle 紧急安全警报:Java 9.1 分漏洞 CVE-2026-91403,撤销对 eMudhra 风险证书的信任
java·安全·oracle