Java 序列化(Serialization)是指把 Java 对象转换成字节流,反序列化(Deserialization)则是把 字节流恢复成 Java 对象。它的主要作用和典型使用场景如下:
将对象状态保存到文件或数据库中,程序重启后仍能恢复对象。
ObjectOutputStream oos = new ObjectOutputStream(
new FileOutputStream("user.dat"));
oos.writeObject(user);
oos.close();
在分布式系统或网络通信中,对象需要跨 JVM 传输:
// 服务端 / 客户端
ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
oos.writeObject(request);
不同 JVM(甚至不同机器)之间共享对象数据。
通过序列化和反序列化实现对象的“深拷贝”。
ByteArrayOutputStream bos = new ByteArrayOutputStream();
new ObjectOutputStream(bos).writeObject(obj);
Object copy = new ObjectInputStream(
new ByteArrayInputStream(bos.toByteArray())).readObject();
将对象存入:
Serializable 接口public class User implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
}
Serializable 是标记接口(无方法)serialVersionUID 用于版本控制static 变量(属于类)transient 修饰的字段private transient String password; // 不序列化
⚠️ 实际开发中并不推荐使用 Java 原生序列化:
| 问题 | 说明 |
|---|---|
| 性能差 | 序列化速度慢 |
| 体积大 | 字节流冗余 |
| 不安全 | 反序列化易引发漏洞 |
| 跨语言差 | 仅 Java 可用 |
✅ 更常用替代方案:
Java 序列化的作用是:把对象变成可存储、可传输的字节形式,以便持久化或跨 JVM 使用。
如果你是想了解 什么时候该用 / 不该用序列化,或者 和其他序列化方式对比,可以继续问。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。