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