在Java语言中,我们只要是实现了Serializable 接口,对象就可以被序列化,java这种序列化模式为我们开发提供了便利,使我们不必具体的关注序列化的实现,只要实现Serializable 接口,类的所有属性和方法都会自动序列化。
但是在开发过程中,我们有的属性不需要序列化,我们可以实现 Externalizable接口自己实现序列化与反序列化方法,这就意味着我们需要额外的代码进行序列化。此时,transient 关键字为我们提供了便利。我们需要实现Serilizable接口,将不需要序列化的属性前添加关键字transient,序列化对象的时候,这个属性就不会序列化到指定的目的地中。
示例代码:
public class Test implements Serializable{
int a;
transient String b;
public Test(int a,String b){
this.a=a;
this.b=b;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "a="+a+",b="+b;
}
}
public class TestTransient {
public static void main(String[] args) throws Exception {
Test t = new Test(1, "Test1");
System.out.println(t);
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("/mysoft/test/t.dat"));
oos.writeObject(t);
oos.close();
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("/mysoft/test/t.dat"));
t = (Test) ois.readObject();
System.out.println(t);
}
}
运行结果:
a=1,b=Test1 a=1,b=null
可见,反序列化后b为空,加了关键字transient的b没有被序列化