java transient简单介绍
?我們都知道一個對象僅僅要實現了Serilizable接口,這個對象就能夠被序列化,java的這樣的序列化模式為開發人員提供了非常多便利,我們能夠不必關系詳細序列化的過程,僅僅要這個類實現了Serilizable接口,這個的全部屬性和方法都會自己主動序列化。
?????? 然而在實際開發過程中,我們經常會遇到這種問題,這個類的有些屬性須要序列化,而其它屬性不須要被序列化,誠然,你能夠讓這個類來實現Externalizable接口,這個接口是Serilizable的子接口,可是你必須實現readExternal和writeExternal方法,你能夠在這兩個方法中實現詳細屬性的反序列化和序列化操作。然而這就意味著你必須在這兩個方法中手工編寫額外的代碼來進行詳細屬性的序列化。java的transientkeyword為我們提供了便利,你僅僅須要實現Serilizable接口,將不須要序列化的屬性前加入keywordtransient,序列化對象的時候,這個屬性就不會序列化到指定的目的地中。
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前加入keywordtransient,我們看到盡管我們序列化的對象a的屬性值為“張三”,可是當我們反序列化之后發現這個屬性為空,說明這個屬性沒有進行序列化。
轉載于:https://www.cnblogs.com/mengfanrong/p/3779727.html
總結
以上是生活随笔為你收集整理的java transient简单介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring------自动化装配Bea
- 下一篇: Apache和Nginx的区别