当你实现Serializable接口的时候,预示着你在使用序列化与反序列化,此时你会考虑如果对于大对象是不是也需要进行序列化,如果不需要,那怎么避免他们在实现Serializable接口后不序列化这个属性对象那?OK,java提供了关键字transient,它的意思是瞬间,它会避免被她修饰的属性被序列化。
下边是一个例子:
虽然set了middlename的值,但是通过序列化,它被忽略了,所以当反序列化后,它就为null。
下边是一个例子:
package javabeat.samples;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
class NameStore implements Serializable{
private String firstName;
private transient String middleName;
private String lastName;
public NameStore (String fName, String mName, String lName){
this.firstName = fName;
this.middleName = mName;
this.lastName = lName;
}
public String toString(){
StringBuffer sb = new StringBuffer(40);
sb.append("First Name : ");
sb.append(this.firstName);
sb.append("Middle Name : ");
sb.append(this.middleName);
sb.append("Last Name : ");
sb.append(this.lastName);
return sb.toString();
}
}
public class TransientExample{
public static void main(String args[]) throws Exception {
NameStore nameStore = new NameStore("Steve","Middle","Jobs");
ObjectOutputStream o = new ObjectOutputStream(new FileOutputStream(
"nameStore"));
// writing to object
o.writeObject(nameStore);
o.close();
// reading from object
ObjectInputStream in =new ObjectInputStream(
new FileInputStream("nameStore"));
NameStore nameStore1 = (NameStore)in.readObject();
System.out.println(nameStore1);
}
}
// output will be : First Name : SteveMiddle Name : nullLast Name : Jobs
虽然set了middlename的值,但是通过序列化,它被忽略了,所以当反序列化后,它就为null。