天天看點

java序列化# 背景# 細節# 後記

# 背景

java對象是在jvm中,如果jvm銷毀,那麼對象都不存在了。如果想繼續使用java對象的話,需要用到序列化,将java中的對象轉化為位元組序列,用于存儲和運輸;

那麼可以将DB了解為一種序列化,将java對象序列化後存儲在DB中,将java對象儲存在文本中也是一種序列化

# 細節

需要被序列化的類,需要實作Serializable接口

雖然Serializable接口是空的,沒有任何方法,但也要實作,起到辨別的作用

同一位元組流中的引用是得到儲存的

User user =  new User("jwen");

Order o1 =  new Order(user, "o1");

Order o2 =  new Order(user, "o2");

将這兩個對象o1和o2序列化儲存在同一文本中(同一輸出流),會發現兩個對象的o1.user == o2.user

但将兩個對象分别儲存在不同檔案中,file1和file2的話,引用是不一樣的 o1.user != o2.user

反序列化沒有調用構造函數

public class User implements Serializable {

    private String name;
    private int id = 1;

    public User(String name, int id) {
        System.out.println("構造函數調用");
        this.name = name;

    }
}      

這裡的構造方法不會被調用

序列化Id辨別版本資訊

private static final long serialVersionUID = -5809782578272943999L;      

# 後記

推薦部落格:https://www.cnblogs.com/xdp-gacl/p/3777987.html

雖千萬人,吾往矣!