在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没有被序列化