java transient 简介

来源:互联网 发布:sqlserver数据仓库 编辑:程序博客网 时间:2024/06/05 15:56

======================================================
注:本文源代码点此下载
======================================================

我们都知道一个对象只要实现了serilizable接口,这个对象就可以被序列化,java的这种序列化模式为开发者提供了很多便利,我们可以不必关系具体序列化的过程,只要这个类实现了serilizable接口,这个的所有属性和方法都会自动序列化。

然而在实际开发过程中,我们常常会遇到这样的问题,这个类的有些属性需要序列化,而其他属性不需要被序列化,诚然,你可以让这个类来实现externalizable接口,这个接口是serilizable的子接口,但是你必须实现readexternal和writeexternal方法,你可以在这两个方法中实现具体属性的反序列化和序列化操作。然而这就意味着你必须在这两个方法中手工编写额外的代码来进行具体属性的序列化。java的transient关键字为我们提供了便利,你只需要实现serilizable接口,将不需要序列化的属性前添加关键字transient,序列化对象的时候,这个属性就不会序列化到指定的目的地中。

public class testtransient {

/**

* @param args

* @throws ioexception

* @throws filenotfoundexception

* @throws classnotfoundexception

*/

public static void main(string[] args) throws filenotfoundexception, ioexception, classnotfoundexception {

a a = new a(25,"张三");

system.out.println(a);

objectoutputstream oos = new objectoutputstream(new fileoutputstream("c:\\mm.txt"));

oos.writeobject(a);

oos.close();

objectinputstream ois = new objectinputstream(new fileinputstream("c:\\mm.txt"));

a = (a)ois.readobject();

system.out.println(a);

}

}

class a implements serializable{

int a;

transient string b;

public a(int a,string b){

this.a = a;

this.b = b;

}

public string tostring(){

return "a = "+a+",b = "+b;

}

}

运行结果如下:

a = 25,b = 张三

a = 25,b = null

在上面的例子中,我将属性b前添加关键字transient,我们看到虽然我们序列化的对象a的属性值为“张三”,但是当我们反序列化之后发现这个属性为空,说明这个属性没有进行序列化。


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/