將物件實作了Serilizable ,這個物件即可被序列化,java中這種序列化提供了很多便利,我們不深入探討序列化的過程,只要這個類別實作了Serilizable,這個類別的所有屬性和方法都會自動序列化。
那修飾字 transient 是作什麼用的呢?
java 的transient關鍵字為我們提供了便利,我們只需要實作Serilizable介面,將不需要序列化的屬性前加上修飾字 transient,序列化物件的時候,這個屬性就不會序列化到指定的目的地中。
直接看實例吧
import java.io.*;
class Test implements Serializable{
transient int i=2;
static transient int j = 4;
int k =6;
}
public class TransientSample{
public static void main (String[] args){
String fileName1 = "C:\\TestFile.txt";
Test obj = new Test();
obj.i = 3;
obj.j = 5;
obj.k = 7;
try {
FileOutputStream fos = new FileOutputStream(fileName1);
ObjectOutputStream objo = new ObjectOutputStream(fos);
objo.writeObject(obj);
FileInputStream fis = new FileInputStream(fileName1);
ObjectInputStream obji = new ObjectInputStream(fis);
Test obj1 =(Test) obji.readObject();
System.out.println(obj1.i + " " + obj1.j + " " + obj1.k);
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
最後的輸出會是
0 5 7
obj.i 因為有加上修飾字 transient ,所以序列化寫入檔案 TestFile.txt 並沒有存入值.
obj.k 因為未加上修飾字 transient ,所以序列化後,給的值會存入檔案 TestFile.txt 中 .
而obj.j 因為修飾字 transient 對static變數是無效的,所以值依然可以帶入檔案 TestFile.txt 中 .