一、transient 关键字作用
用来修饰变量,如果一个对象被序列化后,我们想屏蔽掉此对象一个属性使其避免序列化保存时,可以用transient关键字修饰对应的域,则当此对象被序列化时,用transient关键字修饰的成员变量不会被序列化
二、代码示例
package org.jxl.java.basic.io;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
/**
* @desc transient关键字的说明
* @date 2014年8月6日 下午4:59:04
* @version 1.0
* @author Jin Xueliang
*/
public class TransientObj implements Serializable // 实现序列化接口,以便对象流进行操作
{
/**
*
*/
private static final long serialVersionUID = 1L;
private String p1;
private int p2;
private transient String p3; // 用transient修饰,使此成员变量在序列化时屏蔽掉
public TransientObj(String p1, int p2, String p3)
{
super();
this.p1 = p1;
this.p2 = p2;
this.p3 = p3;
}
public String getP1()
{
return p1;
}
public void setP1(String p1)
{
this.p1 = p1;
}
public int getP2()
{
return p2;
}
public void setP2(int p2)
{
this.p2 = p2;
}
public String getP3()
{
return p3;
}
public void setP3(String p3)
{
this.p3 = p3;
}
public static void main(String[] args)
{
// 三个成员分别赋值为:p1、12、p3
TransientObj obj = new TransientObj("p1", 12, "p3");
try
{
String file = "/data/test/transient.log";
ObjectOutputStream objectOutputStream = new
ObjectOutputStream(new FileOutputStream(file));
// 对象输出流,操作的对象必须实现 java.io.Serializable 接口
objectOutputStream.writeObject(obj);
objectOutputStream.close();
ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream(file));
// 对象输入流,操作的对象必须实现 java.io.Serializable 接口
TransientObj readObj = (TransientObj)inputStream.readObject();
inputStream.close();
System.out.println(readObj.getP1()); // 输出 p1
System.out.println(readObj.getP2()); // 输出 12
System.out.println(readObj.getP3()); // 成员变量p3被transient关键字修饰,则输出为 null,而不是p3,
}catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}