java 實現深度複製

Java中,創建一個對象,我們通常會有一個引用(可以理解爲變量)指向該對象,當我們通過引用變量改變對象的值(屬性)時,引用是不變的,變的是內存裏面的那塊內存,即引用所指向的對象。引用意味着,任何人對引用所指向的對象屬性或方法做改變時,都將會體現出來。有時候我們需要真正的複製(拷貝內存地址所有資料存放到另外一個地址,也就是同時擁有兩份一模一樣的東西在兩個地方存在),而不僅僅是複製了改引用給另外一個變量。下面代碼是實現深度複製的一種方式:

import java.io.*;

/**
 * Create by tiger on 2019/2/26
 */
public class DeepCopy {

    /**
     * 深度複製,實參類必須實現Serializable接口
     *
     * @param object
     * @return
     * @throws IOException
     * @throws ClassNotFoundException
     */
    public static Object deepCopy(Object object) throws IOException, ClassNotFoundException {

        //字節數組輸出流,對象序列化後保存的對象
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        //對象輸出流
        ObjectOutputStream oos = new ObjectOutputStream(bos);
        //將對象序列化輸出到字節輸出流中
        oos.writeObject(object);

        //然後反序列化,從字節輸出流裏中讀取出來,即完成複製
        ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
        //對象輸入流
        ObjectInputStream ois = new ObjectInputStream(bis);
        //讀取字節流,反序列化爲對象
        return ois.readObject();
    }
}


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章