温馨提示×

温馨提示×

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

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

怎样实现java序列化

发布时间:2026-10-25 17:35:23 来源:亿速云 阅读:85 作者:小樊 栏目:编程语言

在 Java 中,**序列化(Serialization)**是指把对象转换成字节流,便于存储或网络传输;反序列化则是把字节流恢复成对象。

下面从基本用法 → 注意事项 → 常见方式系统讲一下。


一、最基础的 Java 序列化(JDK 原生)

1️⃣ 让类实现 Serializable 接口

import java.io.Serializable;

public class User implements Serializable {
    private static final long serialVersionUID = 1L;

    private String name;
    private int age;

    // 构造方法、getter、setter
}

✅ Serializable 是标记接口,不需要实现任何方法
✅ serialVersionUID 建议显式声明,防止类结构变化导致反序列化失败


2️⃣ 序列化(对象 → 文件/字节流)

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

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

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

二、序列化控制(重要)

1️⃣ 不序列化某些字段

private transient String password;

transient 修饰的字段不会被序列化。


2️⃣ 自定义序列化逻辑

private void writeObject(ObjectOutputStream oos) throws IOException {
    oos.defaultWriteObject();
    oos.writeUTF(encrypt(password));
}

private void readObject(ObjectInputStream ois)
        throws IOException, ClassNotFoundException {
    ois.defaultReadObject();
    password = decrypt(ois.readUTF());
}

三、常见序列化方式对比

方式 特点 使用场景
Java 原生序列化 JDK 自带,简单 Java 内部通信
JSON(Jackson / Gson) 可读性好,跨语言 Web / 前后端
Protobuf 高性能、小体积 RPC / 大数据
Hessian 跨语言、二进制 分布式服务

四、示例:JSON 序列化(更常用)

ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(user);
User u = mapper.readValue(json, User.class);

五、常见坑 ⚠️

  1. 未实现 Serializable
  2. serialVersionUID 不一致
  3. 父类未序列化
  4. 敏感字段未加密(密码、token)

如果你愿意,我可以:

  • 给你一个 完整可运行 Demo
  • 讲 Java 序列化底层原理
  • 对比 Java vs JSON vs Protobuf

你想看哪一个?

向AI问一下细节

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

AI
助
手