transient关键字
默认情况下当执行了对象序列化的时候会将类中的全部属性的内容进行全部的序列化操作,但是很多情况下有一些属性可能并不需要序列化的处理,这个时候就可以在属性的定义上使用transient关键字来完成了。
private transient String name;
在进行序列化的时候,name属性的内容时不会被保存下来的,也就是说,读取的name数据将是其对应数据类型的默认值“null”。
范例:
package 序列化;
import java.io.*;
public class 序列化的基本概念{
private static final File SAVE_FILE = new File("D:\\Test\\person.person");
public static void main(String[] args) throws Exception{
//序列化,完成后生成person.person文件
saveObject(new Person("张三",18));
//反序列化
System.out.println(loadObject());
}
public static void saveObject(Object obj) throws Exception{
ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(SAVE_FILE));
objectOutputStream.writeObject(obj); //序列化
objectOutputStream.close();
}
public static Object loadObject() throws Exception{
ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(SAVE_FILE));
Object obj = objectInputStream.readObject(); //反序列化
objectInputStream.close();
return obj;
}
}
class Person implements Serializable{ //Person类可以被序列化
private transient String name;
private int age;
public Person(String name,int age){
this.name = name ;
this.age = age;
}
@Override
public String toString(){
return "姓名:"+this.name+"、年龄:"+this.age;
}
}
姓名:null、年龄:18
如果假设有一些是需要计算保存的属性内容往往是不需要被序列化的,这时就可以使用到transient,在开发中大部分需要被序列化的类往往都是简单java类,所以这个关键字的频率不高。