JVM 深淺拷貝 序列化

2021-09-25 13:37:28 字數 1418 閱讀 4843

序列化:

概念:將記憶體中儲存的物件變為二進位製流進行輸出或者儲存在文字中。

–將物件變為二進位製流

要想讓類支援序列化,必須實現serializable介面。(標識介面)

serializable介面為標識介面,只有實現了serializable介面的類才具備物件序列化功能。

具體實現序列化和反序列化,需要使用io包中提供的倆個處理類:

序列化類:objectoutputstream:

選擇目標終端

public objectoutputstream(outputstream out) throws ioexception

weiteobject(object obj):將obj變為二進位製流輸出到目標終端

反序列化類:objectinputstream:

選擇反序列化的目標終端

public objectinputstream(inputstream in) throws ioexception

public final object readobject();將二進位製流反序列化為物件

transient關鍵字:

若希望類中的若干屬性不被序列化,可以在屬性前新增transient關鍵字

一 、 深淺拷貝 (物件)

cloneable:clonenotsupportedexception;

只有子類實現了cloneable介面後才可以使用object類提供的clone方法。

protected native object clone() throws clonenotsupportedexception;

要想讓物件具有拷貝的功能,必須實現cloneable介面(標識介面,表示此類允許被clone),並且在類中自定義clone呼叫object類提供的繼承許可權clone方法。

淺拷貝:物件值拷貝

對於淺拷貝而言,拷貝出來的物件仍然保留原物件的所有引用。

問題: 牽一而動全身

只要任意乙個拷貝物件(或原物件)中的引用發生改變,所有物件均會受到影響。

深拷貝:

深拷貝拷貝出來的物件產生了所有引用的新的物件。

如何實現深拷貝:

1 . 包含的其他類繼續實現cloneable介面,並且呼叫clone方法

2 . 使用序列化(*******)

使用序列化進行深拷貝,無須在實現cloneable介面,只需要實現serializable介面即可。

特點:修改任意乙個物件,不會對其他物件產生影響

延遲拷貝:淺拷貝+深拷貝

WPF控制項深拷貝 序列化 反序列化

今天debuglzq在做wpf拖動總結的時候,遇到了這個問題。baidu了下,貌似沒有解決這個問題的權威答案,遂寫下這篇博文。我想做的事情是 拖動乙個窗體內的控制項 rectangle 到另乙個容器控制項內,而保留原來的控制項。為了更好地把問題說清楚,請看如下 片段 void canvas1 dro...

WPF控制項深拷貝 序列化 反序列化

原文 wpf控制項深拷貝 序列化 反序列化 今天debuglzq在做wpf拖動總結的時候,遇到了這個問題。baidu了下,貌似沒有解決這個問題的權威答案,遂寫下這篇博文。我想做的事情是 拖動乙個窗體內的控制項 rectangle 到另乙個容器控制項內,而保留原來的控制項。為了更好地把問題說清楚,請看...

WPF控制項深拷貝 序列化 反序列化

原文 wpf控制項深拷貝 序列化 反序列化 今天debuglzq在做wpf拖動總結的時候,遇到了這個問題。baidu了下,貌似沒有解決這個問題的權威答案,遂寫下這篇博文。我想做的事情是 拖動乙個窗體內的控制項 rectangle 到另乙個容器控制項內,而保留原來的控制項。為了更好地把問題說清楚,請看...