网站首页 > 资源文章 正文
前言
??今天在看项目代码时候,看到了下面这样一行代码,用transient修饰了一个变量,主要作用是做一个全局开关。说实话我是第一次看到这个关键字。激发了我的好奇心,所以就了解一下这是何方神圣。
java复制代码 /**
* 全局开关
*/
public static transient boolean running = true;
transient 是什么?
??在 Java 中,transient 是一个关键字,用于指定一个类的字段(成员变量)在序列化时应该被忽略。在 Java 对象序列化期间,对象的状态被转换为字节流,以便在网络上传输或持久保存到磁盘。如果一个字段被标记为 transient,那么它的值不会被序列化,在反序列化时会被恢复其默认值。
简单示例
java复制代码public class Example implements Serializable {
private String name;
private transient int age;
public Example(String name, int age) {
this.name = name;
this.age = age;
}
public String toString() {
return "Example{name='" + name + "', age=" + age + "}";
}
public static void main(String[] args) throws Exception {
String dir = "/Users/ryan/Desktop/";
// 创建一个Example对象并序列化到文件
Example obj = new Example("Ryan", 20);
System.out.println("Before serialization: " + obj);
OutputStream outputStream = Files.newOutputStream(Paths.get(dir + "example.ser"));
try (ObjectOutputStream out = new ObjectOutputStream(outputStream)) {
out.writeObject(obj);
}
// 从文件中反序列化Example对象
InputStream inputStream = Files.newInputStream(Paths.get(dir + "example.ser"));
try (ObjectInputStream in = new ObjectInputStream(inputStream)) {
System.out.println("After deserialization: " + in.readObject());
}
}
}
执行结果:
java复制代码Before serialization: Example{name='Ryan', age=20}
After deserialization: Example{name='Ryan', age=0}
??在上述示例中,我们创建了一个名为 Example 的类,并在其中定义了两个字段 name 和 age,其中 age 被标记为 transient。然后,我们创建了一个 Example 对象并将其序列化到名为 example.ser 的文件中。
??接着,我们从文件中反序列化了刚刚序列化的 Example 对象,并将其赋值给一个新的对象 newObj。然后,我们打印出了原始对象和反序列化后的对象。可以看到,在反序列化后,age 字段的值被恢复为其默认值 0。
使用场景
序列化敏感数据
??有些对象包含一些敏感信息,如密码、访问令牌等,这些信息在对象序列化时需要被保护,以防被未授权的用户访问和泄露。
提高序列化性能
??有些对象中的字段可能会影响序列化和反序列化的性能,如包含大量数据的对象,这些数据可能会在网络传输或磁盘存储期间增加延迟和负载,使用 transient 关键字可以排除这些字段,提高序列化性能。
临时数据
??有些字段仅用于对象的内部计算或临时存储数据,这些数据在序列化时无需保留,因此可以使用 transient 关键字来忽略这些字段,从而减少序列化后对象的大小。
需要注意的点
- transient关键字只能修饰变量,而不能修饰方法和类。
- transient标记的变量所在的类必须实现Serializable接口。
- transient标记的变量在反序列化时会被初始化为默认值,需要在程序中手动进行初始化操作。
总结
??transient 关键字只是暂时地在序列化过程中忽略了该字段,而不是永久性地从对象中删除该字段。在反序列化时,该字段将被恢复为其默认值。因此,如果需要永久地从对象中删除一个字段,直接将其从类中完全删除。
应该很少有人,会在项目中使用这个关键字吧,所以它值得被遗忘。
结尾
??如果觉得对你有帮助,可以多多评论,多多点赞哦,也可以到我的主页看看,说不定有你喜欢的文章,也可以随手点个关注哦,谢谢。
- 上一篇: Java:transient与序列化
- 下一篇: 高分子扩散焊机:什么是瞬间液相扩散焊?
猜你喜欢
- 2024-11-23 Spring JPA 查询提示错 org.hibernate.TransientObjectException
- 2024-11-23 ArrayList & Vector (transient关键字)--JAVA成长之路
- 2024-11-23 SPL 发布第二代 Transient Designer 4 Mk2 动态处理器,外观重新设计
- 2024-11-23 新版本系统适配:Android 12 中的兼容性变更
- 2024-11-23 5万年一遇彗星将造访地球 或肉眼可见
- 2024-11-23 深入了解Java transient关键字的用法和注意事项
- 2024-11-23 一次线上故障:数据库连接池泄露后的思考
- 2024-11-23 福利:Audio Assault 的 Transient+瞬态塑形效果器插件限时免费
- 2024-11-23 为什么 ArrayList 的 elementData 加上 transient 修饰?
- 2024-11-23 Java中transient关键字
你 发表评论:
欢迎- 05-21外贸人必备8个效率外贸工具合集
- 05-21Dify实战:解除Dify知识库上传文件15MB限制的
- 05-21腾讯云国际站:怎样优化TCP传输效率?
- 05-21电脑文件怎么压缩
- 05-21手机扩容新方案,搭配腾隐P2000移动固态硬盘,还可以在再战几年
- 05-21如何安全的传输文件(2)
- 05-21前端大文件秒传黑科技!程序员集体沸腾
- 05-21128GB内存8060S最强核显!极摩客EVO-X2 Max+ 395开箱
- 最近发表
- 标签列表
-
- 电脑显示器花屏 (79)
- 403 forbidden (65)
- linux怎么查看系统版本 (54)
- 补码运算 (63)
- 缓存服务器 (61)
- 定时重启 (59)
- plsql developer (73)
- 对话框打开时命令无法执行 (61)
- excel数据透视表 (72)
- oracle认证 (56)
- 网页不能复制 (84)
- photoshop外挂滤镜 (58)
- 网页无法复制粘贴 (55)
- vmware workstation 7 1 3 (78)
- jdk 64位下载 (65)
- phpstudy 2013 (66)
- 卡通形象生成 (55)
- psd模板免费下载 (67)
- shift (58)
- localhost打不开 (58)
- 检测代理服务器设置 (55)
- frequency (66)
- indesign教程 (55)
- 运行命令大全 (61)
- ping exe (64)
本文暂时没有评论,来添加一个吧(●'◡'●)