Java的serialization提供了一种持久化对象实例的机制。当持久化对象时,可能有一个特殊的对象数据成员,我们不想用serialization机制来保存它。为了在一个特定对象的一个域上关闭serialization,可以在这个域前加上关键字transient。
transient是Java语言的关键字,用来表示一个域不是该对象串行化的一部分。当一个对象被串行化的时候,transient型变量的值不包括在串行化的表示中,然而非transient型的变量是被包括进去的。
下面是用内部类实现的例子,请大家参考
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.text.MessageFormat; /** * * ClassName: TestTransinent * @Description: 用java内部类,测试加上transient关键字的成员变量不被序列化 * @author zhangyan * @date 2015-11-30 */ public class TestTransinent implements java.io.Serializable { /** * @Fields serialVersionUID : TODO */ private static final long serialVersionUID = 1L; class TransientInfo implements java.io.Serializable { /** * @Fields serialVersionUID : TODO */ private static final long serialVersionUID = 1L; private String name; private String age; private transient String pwd;//不需要序列号的成员变量 public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } } /** * * @Title: getTransientInfo * @Description: 在外部类里面创建成员内部类的实例 * @param @return * @return TransientInfo * @throws * @author zhangyan * @date 2015-11-30 */ public TransientInfo getTransientInfo(){ System.out.println("在外部类里面创建成员内部类的实例"); return this.new TransientInfo(); } /** * @Title: main * @Description: TODO * @param @param args * @return void * @throws * @author zhangyan * @date 2015-11-30 */ public static void main(String[] args) { // TODO Auto-generated method stub TransientInfo info = null; //创建内部类实例的两种方法 //info = new TestTransinent().getTransientInfo();//在外部类里面创建成员内部类的实例 info = (new TestTransinent()).new TransientInfo();//在外部类之外创建内部类的实例 info.setName("张三"); info.setAge("26"); info.setPwd("123456"); try { //序列化对象 ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("E:\\TestTransinent.txt")); out.writeObject(info); out.close(); System.out.println("TransientInfo对象序列化成功!"); //反序列化对象 ObjectInputStream ois = new ObjectInputStream(new FileInputStream( new File("E:\\TestTransinent.txt"))); info = (TransientInfo) ois.readObject(); ois.close(); System.out.println("TransientInfo对象反序列化成功!"); System.out.println(MessageFormat.format("name={0},age={1},pwd={2}", info.getName(), info.getAge(), info.getPwd()));//输出结果:name=张三,age=26,pwd=null } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
参考资料
http://www.blogjava.net/fhtdy2004/archive/2009/06/20/286112.html
http://www.cnblogs.com/mengdd/archive/2013/02/08/2909307.html
http://www.cnblogs.com/xdp-gacl/p/3777987.html