118java

90 阅读1分钟

对象序列化(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=44701697026009032at

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 关键字了