开发者学堂课程【【名师课堂】Java 高级开发:【第 13 个代码模型】对象序列化(transient 关键字)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/372/detail/4622
【第 13 个代码模型】对象序列化(transient 关键字)
目录
一、 Transient 关键字(理解)
二、 范例:使用 transient
一、Transient 关键字(理解)
实际上序列化的处理在 java,io 包里面有两类,Serializable 是使用最多的序列化接口,这种操作采用自动化的模式完成,也就是说默认情况下所有的属性都会被序列化。
还有一个 Externalizable 接口是需要用户自己来动手处理序列化处理,一般很少使用。
但是由于默认情况 Serializable 会将对象中的所有属性进行保存,如果现在某些属性不希望被保存了,那么可以使用 transient 关键字。
二、范例:使用 transient
private transient String name;
private int age;
反序列化受到影响:Exception in thread "main" java.io.Invalid issException: cn.mldn.demo.Person; local class incompatible:stream classdesc serialVersionUID=5461445401747625482’local class ser ialVersionUID=44701697026009032
at java.io.ObjectStreamclass.initNonProxy(ObjectStreamClass.iava:616)
at java.io.ObjectInputstream.readNonProxyDesc(ObjectInputStream.java:1623)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.iava:1518)
at java.io.objectInputStream.readordinaryobject(ObjectInputStream.java:1774)
at java.io.objectInputStream.readobjecte(objectInputStream.java:1351)
at java.io.objectInputstream.readobject(ObjectInputStream.iava:371)
at cn.mldn.demo.TestDemo.dser(TestDemo.java:22)
at cn.mldn.demo.TestDemo,main(TestDemo.java:13)
此时类不正确了,读的数据与写的不一样,这个时候我们发现不能读了,需要覆盖的写完了之后在做一个读,代码为
Person [name=null,age=20]
Name 不在了,这叫 transient
不过大部分情况下使用序列化往往是在简单 Java 类上,其他类上使用序列化的操作模式相对较少,而如果是简单 Java 类就很少企业使用 transient 关键字了