序列化:
概念:將記憶體中儲存的物件變為二進位製流進行輸出或者儲存在文字中。
–將物件變為二進位製流
要想讓類支援序列化,必須實現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 到另乙個容器控制項內,而保留原來的控制項。為了更好地把問題說清楚,請看...