java中的序列化流和還原序列化流

來源:互聯網
上載者:User

標籤:under   還原序列化   ora   序列化   put   cto   資料   文本   zab   

序列化流:把對象按照流一樣的方式存入文字檔或者在網路中傳輸。    對象 -- 流資料(ObjectOutputStream)

還原序列化流:把文字檔中的流對象資料或者網路中的流對象資料還原成對象。流資料 -- 對象(ObjectInputStream)

序列化流和還原序列化流不同於位元組流 字元流 記憶體位元組流,這些都是把字串寫入/讀取檔案,序列化流和還原序列化流可以將對象寫入/讀取文字檔中.

但是我們要注意的是,寫入和讀取的檔案要實現Serializable這個介面,當然這個介面是沒有任何方法的,直接implements就好,類似於這種沒有任何方法的介面被稱為標記介面.

可是當我們對原有的對象中的資料改變了之後,直接讀取(不寫入,在實際開發中不能每改一次就寫入一次),就會報錯:

 

 

java.io.InvalidClassException: DemoPerson; local class incompatible: stream classdesc serialVersionUID = -2071565876962058344,  local class serialVersionUID = -8345153069362641443

這是因為對象類實現Serializable就會有一個id值,當改變對象中的資料時,這個id值會發生改變,但是文字檔中的寫入和讀取的id還是以前的id值,造成id值不匹配,就會報錯,解決辦法:對象類中會報一個黃色的警告,點擊這個警告按照編譯器實現就行.

附代碼:

Person類

 1 public class Person implements Serializable { 2     private static final long serialVersionUID = -2071565876962058344L; 3  4     private String name; 5  6     // private int age; 7  8     private transient int age; 9 10     // int age;11 12     public Person() {13         super();14     }15 16     public Person(String name, int age) {17         super();18         this.name = name;19         this.age = age;20     }21 22     public String getName() {23         return name;24     }25 26     public void setName(String name) {27         this.name = name;28     }29 30     public int getAge() {31         return age;32     }33 34     public void setAge(int age) {35         this.age = age;36     }37 38     @Override39     public String toString() {40         return "Person [name=" + name + ", age=" + age + "]";41     }42 }

ObjectStreamDemo 類

 1 import java.io.FileInputStream; 2 import java.io.FileOutputStream; 3 import java.io.IOException; 4 import java.io.ObjectInputStream; 5 import java.io.ObjectOutputStream; 6  7 public class ObjectStreamDemo { 8     public static void main(String[] args) throws IOException, ClassNotFoundException { 9 //        write();10         11         read();12     }13 14     private static void read() throws IOException, ClassNotFoundException {15         //還原序列化對象16         ObjectInputStream ois = new ObjectInputStream(new FileInputStream("oss.txt"));17         //接收對象是Object18         Object ob = ois.readObject();19         20         ois.close();21         22         System.out.println(ob);23     }24 25     private static void write() throws IOException {26         //建立序列化輸出資料流27         ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("oss.txt"));28         29         Person p = new Person("熊大", 16);30         31         oos.writeObject(p);32         33         oos.close();34     }35 }

 

 

 

java中的序列化流和還原序列化流

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.