眼看就要2012了,这一年给自己树立的研究课题基本上因为工作的转型,最终都没能实现。开发经验开始消减,更没能赶上新技术。终于,我要恢复开发经验!
找回曾经的我!
最近被问到很多Java基础性的问题,突然发现自己长时间沉迷于框架整合的乐趣中,有关于底层这方面原来不曾深度研究,有必要恶补下了。
“transient”——“瞬态”,先不说这个翻译是否恰当,这个变量关键字一直不曾使用,简单的说就是被瞬态定义的变量不可序列号。或者这么给他换个名字——“不可序列化状态”?
打个比方,如果一个用户有一些敏感信息(譬如密码,银行卡号等),为了安全起见,不希望在网络操作(主要涉及到序列化操作,本地序列化缓存也适用)中被传输。这些信息对应的变量就可以被定义为transient类型。换句话说,这个字段的生命周期仅存于调用者的内存中。
定义People
-
publicclassPeopleimplementsSerializable{
-
privatestaticfinallongserialVersionUID=8294180014912103005L;
-
-
-
-
-
privateStringusername;
-
-
-
-
privatetransientStringpassword;
-
}
密码字段为transient,这时候如果对该对象进行序列化,这个密码字段是不会被保存的。
为了代码简洁,未将流操作至于try-catch中,仅为演示,勿仿!
-
publicstaticvoidmain(String[]args)throwsException{
-
-
Peoplep=newPeople();
-
p.setUsername("snowolf");
-
p.setPassword("123456");
-
-
System.err.println("------操作前------");
-
System.err.println("username:"+p.getUsername());
-
System.err.println("password:"+p.getPassword());
-
-
ObjectOutputStreamoos=newObjectOutputStream(newFileOutputStream(
-
"people.txt"));
-
oos.writeObject(p);
-
oos.flush();
-
oos.close();
-
-
ObjectInputStreamois=newObjectInputStream(newFileInputStream(
-
"people.txt"));
-
p=(People)ois.readObject();
-
-
ois.close();
-
-
System.err.println("------操作后------");
-
System.err.println("username:"+p.getUsername());
-
System.err.println("password:"+p.getPassword());
-
-
}
执行操作:
引用
------操作前------
username: snowolf
password: 123456
------操作后------
username: snowolf
password: null
密码字段为null,反序列化时根本没有从文件中获取到信息。
这个变量类型,理解起来都不费事,但就是适用场景,我一直纠结。
暂时整理如下,欢迎拍砖补充!
适用场景:
1.不打算序列化某字段的值,节省空间
2.传递序列化流的时候,不传递该值等
分享到:
相关推荐
关于Java中关键字transient和串行化的简略介绍
java关键字transient
Java中的transient关键字
JAVA中transient关键字的讲解
传热学小案列,一维非稳态传热分析,推荐大家学习
主要和大家说一说java关键字final和transient,感兴趣的小伙伴们可以参考一下
NULL 博文链接:https://jackyz548.iteye.com/blog/1662257
本篇文章序列化、反序列化用的类是同一个类,可以通过注释main中1然后修改Stu类实现有无transient关键字修饰、serialVersionUID是否不同,得到以下结果: 1、serialVersionUID的数值大小不会影响序列化后的字节数...
transient是Java语言的关键字,用来表示一个域不是该对象串行化的一部分。当一个对象被串行化的时候,
本文章向大家介绍Java transient关键字的使用方法和实例,包括的知识点有transient的作用、transient使用小结、transient使用细节,需要的朋友可以参考一下
主要介绍了java中transient关键字用法,以实例形式分析了java中transient关键字的功能及使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
主要介绍了Java中的transient关键字介绍,需要的朋友可以参考下
主要介绍了Java transient关键字原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
哎,虽然自己熟的是Java,但很多Java基础知识都不知道,比如transient关键字以前都没用到过,所以不知道它的作用是什么,做笔试题时发现有一题是关于这个的,于是花个时间整理下transient关键字的使用,涨下姿势~~~...
Java关键字transient 博客地址:https://blog.csdn.net/qq_36963950/article/details/107733719
主要介绍了Java transient 关键字是干啥的,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
主要介绍了Java transient关键字与序列化操作,结合实例形式详细分析了java序列化操作相关实现方法与操作注意事项,需要的朋友可以参考下
abstract - 1 - boolean - 2 - break - 2 - byte - 2 - case - 3 - catch - 3 - char - 4 - class - 4 - continue - 5 - ...transient - 17 - try - 17 - true - 18 - void - 18 - volatile - 18 - while - 18 -