温馨提示×

温馨提示×

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

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

transient影响序列化吗

发布时间:2026-10-05 01:38:23 来源:亿速云 阅读:86 作者:小樊 栏目:编程语言

transient 会影响 Java 序列化,但只是“部分影响”,具体说明如下:


1. transient 的作用

在 Java 中:

  • 被 transient 修饰的成员变量 不会被序列化
  • 在反序列化时,该字段会使用:
    • 默认值(null、0、false 等)
    • 或构造器 / 初始化块中的值

2. 对序列化的具体影响

✅ 普通序列化(JDK ObjectOutputStream)

class User implements Serializable {
    String name;
    transient String password; // 不会被序列化
}

序列化时:

  • name ✅ 被写入
  • password ❌ 不写入

反序列化后:

  • password == null

3. 不影响的情况

✅ 自定义序列化

如果你实现了以下方法,transient 可以被“绕过”:

private void writeObject(ObjectOutputStream out) throws IOException {
    out.defaultWriteObject();
    out.writeObject(password); // 手动序列化
}

private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
    in.defaultReadObject();
    password = (String) in.readObject(); // 手动反序列化
}

➡ 此时 transient 不生效


✅ 其他序列化方式

transient 只对 JDK 原生序列化有效:

序列化方式 transient 是否生效
Java 原生 Serializable ✅ 生效
JSON(Jackson / Gson) ❌ 不生效
Protobuf ❌ 不生效
Kryo ❌ 不生效

例如 Jackson:

@JsonIgnore
private String password; // 用注解控制

4. 常见使用场景

  • 敏感信息(密码、token)
  • 临时计算结果
  • 可通过其他方式恢复的数据

5. 总结一句话

transient 会影响 JDK 原生序列化,使其字段不被序列化,但不影响 JSON 等其他序列化方式,也可被自定义序列化绕过。

如果你有具体场景(如分布式、缓存、RPC),我可以帮你判断该不该用 transient。

向AI问一下细节

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

AI
助
手