温馨提示×

温馨提示×

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

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

什么是java序列化

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

Java 序列化(Serialization) 是指:把 Java 对象转换成字节流(二进制数据)的过程,以便:

  • 保存到文件
  • 通过网络传输
  • 在进程间传递

相对的,反序列化(Deserialization) 是指:
把字节流恢复成原来的 Java 对象。


一、为什么需要序列化?

Java 对象本身只存在于内存中,序列化可以:

  • 持久化对象(存到磁盘)
  • 网络传输(如 RPC、HTTP、Socket)
  • 缓存(Redis、Memcached)
  • 深拷贝(通过序列化实现)

二、如何实现 Java 序列化?

1️⃣ 实现 Serializable 接口

import java.io.Serializable;

public class User implements Serializable {
    private String name;
    private int age;

    // 构造方法、getter、setter
}

✅ Serializable 是一个标记接口(没有方法)


2️⃣ 序列化(对象 → 字节)

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

3️⃣ 反序列化(字节 → 对象)

ObjectInputStream ois =
    new ObjectInputStream(new FileInputStream("user.dat"));
User user = (User) ois.readObject();
ois.close();

三、serialVersionUID 是什么?

private static final long serialVersionUID = 1L;

作用:

  • 保证序列化版本一致
  • 如果类结构改变但 UID 不变,仍可反序列化
  • 如果不写,Java 会自动生成(容易出问题)

✅ 建议每个序列化类都显式定义


四、哪些字段不会被序列化?

  1. static 变量(属于类,不属于对象)
  2. transient 修饰的字段
private transient String password; // 不序列化

五、序列化的问题 & 风险

⚠️ Java 原生序列化问题:

  • 性能差
  • 字节体积大
  • 不安全(反序列化漏洞)

✅ 实际项目常用:

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

六、一句话总结

Java 序列化就是:把“内存中的对象”变成“可以存储或传输的字节流”,再还原回来。

如果你愿意,我也可以:

  • 对比 JSON 和 Java 序列化
  • 讲反序列化漏洞
  • 给你一个完整可运行示例
向AI问一下细节

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

AI
助
手