当前位置: 首页 > news >正文

java transient关键字有什么用

在 Java 中,transient关键字用于标记类的成员变量,表示该变量不应被序列化。当对象被序列化(例如使用 ObjectOutputStream)时,被标记为 transient的字段会被忽略,不会包含在序列化数据中。

主要作用:

  1. 防止敏感数据被序列化

    如密码、密钥等敏感信息:

    public class User implements Serializable {private String username;private transient String password; // 不会被序列化
    }
  2. 避免序列化无意义或冗余数据

    如临时计算值、缓存数据等:

    public class Report implements Serializable {private int data;private transient int cachedResult; // 无需持久化
    }
  3. 解决不可序列化的依赖

    当字段引用了不可序列化的对象时:

    public class DataHolder implements Serializable {private transient NonSerializableObject obj; // 避免序列化错误
    }

反序列化时的行为:

  • 反序列化时,transient字段会被初始化为默认值:

    • 对象类型:null

    • 数值类型:0/0.0

    • 布尔类型:false

    User user = new User("Alice", "secret");
    // 序列化时 password 被忽略// 反序列化后:
    System.out.println(user.getPassword()); // 输出 null

与其他序列化库的交互:

  • 标准 Java 序列化​:自动忽略 transient字段

  • Gson​:默认忽略 transient字段(可通过 GsonBuilder配置修改)

  • Jackson​:默认不忽略​(需配合 @JsonIgnore注解)

对比其他方案:

方案

作用范围

序列化库支持

是否影响内存状态

transient

字段级别

标准序列化/Gson

是(重置默认值)

@Expose

字段级别

仅 Gson

ExclusionStrategy

灵活定制

仅 Gson

最佳实践:

public class SecureData implements Serializable {private String publicInfo;private transient String secretKey; // 安全敏感字段// 反序列化后手动初始化敏感字段private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {ois.defaultReadObject();this.secretKey = loadKeyFromSecureStore(); // 安全初始化}
}

💡 ​关键点​:transient是 Java 序列化的原生机制,主要解决:

  1. 数据安全问题

  2. 序列化兼容性问题

  3. 优化序列化性能

对于 JSON 序列化(如 Gson),虽然可用但不是唯一方案,需根据具体需求选择。

http://www.dtcms.com/a/525134.html

相关文章:

  • 免费建站哪个比较好大学 生免费商业网站设计
  • perl网站开发企业培训内容有哪些
  • 医疗信创的里程碑:浙江省人民医院异构多活容灾架构的突破与启示
  • KingbaseES数据库:首个多院区异构多活容灾架构,浙人医创新开新篇
  • 标注可用于IP≠实战可用——超50%的IP抗体实际效果欠佳,如何实现0风险IP实验?
  • 建设人才证书查询网站做网站的公司北京有哪些
  • python with 语法
  • tlv32aic32 外部DAC的I2S音频流运行过程分析
  • I/V自动曲线量测仪的主要功能、测量方法和应用
  • 什么是电子负载?爱科赛博电子负载应用探讨
  • 2025.10.24总结
  • 邯郸哪里做网站优化thinkphp企业网站源码
  • BUYCOIN:以社区共治重构加密交易版图,定义交易所3.0时代
  • 建立平台网站需要花多少钱国贸附近网站建设
  • 【Linux C/C++开发】epoll模式的开源库及原生socket实现
  • ARP 报文和 IP 数据报的 区分与联系
  • html网站开发目标临沂做网站多少钱
  • 代谢组学之新手入门级知识概览
  • 开关电源拓扑工程宝典:从原理到实战的深度设计指南
  • 深度学习SE,CBAM,ECA,SimAM模块汇总之SE
  • 10. Python 列表:从单元素更新到切片批量处理
  • 气凝胶基复合相变材料研究进展
  • 天门市网站建设seowordpress小说插件
  • 哪个网站的织梦源码好品牌的网站建设
  • 卷积核权重优化
  • iftop排查带宽问题
  • uniapp开发微信小程序使用物流服务的查询组件展示订单物流信息,以及使用中会遇到的问题
  • 天河做网站营销推广公司经营范围
  • wordpress 评论表情插件金沙百度seo优化公司
  • Ubuntu (Linux) 安装Docker