【Java】浅谈关键词transient的使用
生活随笔
收集整理的這篇文章主要介紹了
【Java】浅谈关键词transient的使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
說明
本文的路徑被我刪了部分,所以復制代碼的話要注意自己寫好文件的path。
控制序列化IO的類
import java.io.*;public class PersonMapper {private PersonMapper() {}private static PersonMapper mapper;/*** 獲取單例* @return 單例*/public static PersonMapper getInstance() {if (mapper == null) {mapper = new PersonMapper();}return mapper;}/*** 反序列化從文件中讀取Person的序列化對象*/public Person readObject() {try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("src/com/.../test/serialPerson.dat"))) {Person obj = (Person)ois.readObject();return obj;} catch (IOException | ClassNotFoundException e) {e.printStackTrace();}return null;}/*** 序列化對象*/public void writeObject(Person object) {try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("src/com/.../test/serialPerson.dat"))) {oos.writeObject(object);} catch (IOException e) {e.printStackTrace();}}}測試類
public class TransientTest {public static void main(String[] args) {Person person = new Person(1, "Tim", 10);PersonMapper mapper = PersonMapper.getInstance();mapper.writeObject(person);System.out.println(mapper.readObject());} }使用transient的Person類
注意實現 java.io.Serializable,并寫一下serialVersionUID。
注意 transient !!!
public class Person implements Serializable {private static final long serialVersionUID = 1L;private Integer id;private String name;private transient Integer age;public Person(Integer id, String name, Integer age) {this.id = id;this.name = name;this.age = age;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}@Overridepublic String toString() {return "Person{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age + '}';}}測試結果:
Person{id=1, name='Tim', age=null}去掉transient的Person類
只刪去 transient:
public class Person implements Serializable {private static final long serialVersionUID = 1L;private Integer id;private String name;private Integer age;public Person(Integer id, String name, Integer age) {this.id = id;this.name = name;this.age = age;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}@Overridepublic String toString() {return "Person{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age + '}';}}測試結果:
Person{id=1, name='Tim', age=10}結論
Java沒有把對象被transient標記的屬性序列化。
薦讀
- Java transient關鍵字使用示例
- Java transient關鍵字使用小記
Update on 2020.3.7
- transient修飾的屬性不進行序列化的操作,起到一定消息屏蔽 的效果
- 被transient修飾的屬性可以正確的創建,但被系統賦為默認值。
比如,int類型為0,String類型為null
注:ObjectInputStream和ObjectOutputStream類不會保存和 讀寫對象中的transient和static類型的成員變量
總結
以上是生活随笔為你收集整理的【Java】浅谈关键词transient的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【C语言】使用指针得到数组的最后一个数
- 下一篇: 【数据库系统】数据库系统的模式分层与数据