java的Serializable接口

  • 作用
    實現(xiàn)這個接口的類可以被序列化和反序列化,也就是以二進制流的形式存儲在文件中,或者從文件中重建類對象。
package com.hjx.search_engine.entity;

import java.io.Serializable;

public class Demo implements Serializable {
//    private static final long serialVersionUID = 1L;
   private String id;
   private String name;

   public String getTag() {
       return tag;
   }

   public void setTag(String tag) {
       this.tag = tag;
   }

   public String tag;

   public String getId() {
       return id;
   }

   public void setId(String id) {
       this.id = id;
   }

   @Override
   public String toString() {
       return "Demo{" +
               "id='" + id + '\'' +
               ", name='" + name + '\'' +
               ", tag='" + tag + '\'' +
               '}';
   }

   public String getName() {
       return name;
   }

   public void setName(String name) {
       this.name = name;
   }

}
package com.hjx.search_engine;

import com.hjx.search_engine.entity.Demo;

import java.io.*;

public class TestSerializable {

    private static void serialize(Object o) throws IOException {
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File("file.txt")));
        oos.writeObject(o);
        System.out.println("序列化成功");
        oos.close();
    }

    private static Demo deserialize(String filename) throws IOException, ClassNotFoundException {
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File(filename)));
        Demo demo = (Demo)ois.readObject();
        ois.close();
        System.out.println("反序列化成功");
        return demo;
    }
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        Demo demo = new Demo();
        demo.setId("123");
        demo.setName("hjx");
        serialize(demo);
        Demo demo1 = deserialize("file.txt");
        System.out.println(demo1.toString());
    }
}

運行結(jié)果:


image.png
  • serialVersionUID作用
  1. 在序列化類對象后,類代碼可能發(fā)生變化,如果前后類代碼的serialVersionUID一致,那么即使類源碼發(fā)生變化,也能后反序列化類文件。如果不一致,反序列化一定不能進行。會產(chǎn)生java.io.InvalidClassException
  2. 如果沒有該字段,則JVM會根據(jù)類的屬性字段自動生成serialVersionUID,同時也跟JVM版本有關(guān),所以在不同的機器上,很可能相同類序列化后也不能被反序列化。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 你會不會有時候像打了雞血,充滿斗志;又有時候像被放了氣的氣球,疲軟無力。多少次你捫心自問,什么才是自己來到這...
    水筠心寧閱讀 283評論 1 0
  • 年后回來,轉(zhuǎn)眼就是 4 月了,匆匆忙忙似乎也沒做些什么。3 月份接連請假數(shù)次,去義烏訪友,參加坷佳婚禮,夾雜著科一...
    閑狐兔閱讀 114評論 0 0
  • 其實今天的文字應該有一個更好的名字,比如,《面對生活的強奸,我們到底丟失了什么》 先聊聊電影吧 民國時期的一個鄉(xiāng)村...
    肥宅V閱讀 369評論 0 1
  • 基礎(chǔ) 進程 指在系統(tǒng)中正在運行的一個應用程序每個進程之間是相互獨立的,每個進程運行在其專用的并且受保護的內(nèi)存空間...
    knightyao閱讀 243評論 0 1

友情鏈接更多精彩內(nèi)容