温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java序列化有何作用

发布时间:2026-10-05 02:40:25 来源:亿速云 阅读:94 作者:小樊 栏目:编程语言

Java 序列化(Serialization)是指把 Java 对象转换成字节流,反序列化(Deserialization)则是把 字节流恢复成 Java 对象。它的主要作用和典型使用场景如下:


一、Java 序列化的主要作用

1️⃣ 对象持久化(保存到磁盘)

将对象状态保存到文件或数据库中,程序重启后仍能恢复对象。

ObjectOutputStream oos = new ObjectOutputStream(
        new FileOutputStream("user.dat"));
oos.writeObject(user);
oos.close();

2️⃣ 网络传输(远程通信)

在分布式系统或网络通信中,对象需要跨 JVM 传输:

  • RPC(如 Java RMI)
  • 微服务间通信(早期方式)
  • Socket 传输对象
// 服务端 / 客户端
ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
oos.writeObject(request);

3️⃣ 跨 JVM 传递对象

不同 JVM(甚至不同机器)之间共享对象数据。


4️⃣ 深拷贝(不常用但可行)

通过序列化和反序列化实现对象的“深拷贝”。

ByteArrayOutputStream bos = new ByteArrayOutputStream();
new ObjectOutputStream(bos).writeObject(obj);
Object copy = new ObjectInputStream(
    new ByteArrayInputStream(bos.toByteArray())).readObject();

5️⃣ 缓存存储

将对象存入:

  • 文件缓存
  • 内存缓存(如 Redis 早期 Java 对象存储)

二、实现序列化的条件

类必须实现 Serializable 接口

public class User implements Serializable {
    private static final long serialVersionUID = 1L;
    private String name;
}
  • Serializable 是标记接口(无方法)
  • serialVersionUID 用于版本控制

三、序列化的一些关键点

✅ 可被序列化

  • 基本类型
  • String
  • 实现了 Serializable 的对象

❌ 不会被序列化

  • static 变量(属于类)
  • transient 修饰的字段
private transient String password; // 不序列化

四、Java 原生序列化的缺点

⚠️ 实际开发中并不推荐使用 Java 原生序列化:

问题 说明
性能差 序列化速度慢
体积大 字节流冗余
不安全 反序列化易引发漏洞
跨语言差 仅 Java 可用

✅ 更常用替代方案:

  • JSON(Jackson / Gson)
  • Protobuf
  • Hessian
  • Kryo
  • MessagePack

五、总结一句话

Java 序列化的作用是:把对象变成可存储、可传输的字节形式,以便持久化或跨 JVM 使用。

如果你是想了解 什么时候该用 / 不该用序列化,或者 和其他序列化方式对比,可以继续问。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手