在Java开发过程中,transient关键字使用的较少,有时候阅读源码出现了该关键字也都被我疏忽了,今日在解决一个线上问题的时候又一次碰到了,当时对这个概念比较陌生,花了几十分钟时间来了解相关的概念以及应用场景,这里做一个记录。
- Java关于transient的定义
- 在对象序列化的过程中,被transient修饰的成员变量不能被序列化。
- 只能修饰变量,不能修饰方法和类。
- 被static修饰的变量(类变量)不能被序列化,不管是否是被transient修饰。
- final和transient同时修饰变量,不会被序列化。
- Java对象的序列化
transient关键字和Java对象序列化深度相关,对象序列化是Java的核心概念之一,这里不做详细的介绍,更详细的可以参考相关的文章。这里只记录核心的几个关键点:
- 对象序列化的内容包含对象的信息和数据
- 对象序列化后的字节码可以存储在很多介质上,也可通过网络传输,是RPC实现的关键
- transient关键字的使用场景
对象的信息和数据通过序列化可以在另外的一台机器上反序列化出来,一些不必要的数据信息如果也序列化的话其实是会增加带宽的使用量;还有在一些场景中,我们从数据安全的角度进行考虑,有一些敏感数据也是需要进行脱敏操作的。
- 对象的成员变量的数据可以有其它的变量推导出来时,可以不被序列化
- 不代表对象状态的变量,只需要在内存中使用,可以不被序列化
- 敏感数据可以不被序列化
本文暂时没有评论,来添加一个吧(●'◡'●)