登录
    Technology changes quickly but people's minds change slowly.

java中的transient关键字

技术宅 破玉 1453次浏览 0个评论

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


华裳绕指柔, 版权所有丨如未注明 , 均为原创|转载请注明java中的transient关键字
喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址