天天看點

序列化和反序列化的原理

java對象和位元組序列的轉換過程,序列化需要保證對對象狀态的儲存和可重建性。

持久化,遠端通信

序列化算法實作原理

1、遞歸地輸出類的超累描述直到不再有超類的對象執行個體的類中繼資料

2、遞歸地輸出對象執行個體的實際資料值(理論上就是從超類開始的)

本質上講就是先把描述字段寫完,再按順序将實際資料寫一遍

jdk中的api

java.io.ObjectOutputStream // 對象輸出流->即序列化
java.io.ObjectInputStream  // 對象輸入流->即反序列化      

想要實作自定義序列化該怎麼做?

1、實作Serializable接口,同時自定義readObject(ObjectInputStream in)和writeObject(ObjectOutputSteam out)方法。

2、實作Externalnalizable接口,實作readExternal(ObjectInput in)和writeExternal(ObjectOutput out)方法。

可以在對應的方法中自定義序列化和反序列化方法

public static void main(String[] args){
        try {
            ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream("C:\\Users\\chaoj\\Desktop\\123\\123.txt"));
            objectOutputStream.writeObject(new Demo("aaaa",1,200000000000L));
            objectOutputStream.flush();
            objectOutputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    static class Demo implements Serializable{
        String a;
        Integer b;
        Long c;
        Demo(String a,Integer b,Long c){
            this.a = a;
            this.b = b;
            this.c = c;
        }
    }