Re: [心得] 序列化的小細節
: 想當然爾:
: System.out.println(a.b == b);
: System.out.println(a.b.a == a);
: System.out.println(b.a == a);
: System.out.println(b.a.b == b);
: 印出來的是:
: true
: true
: true
: true
: 此時:
: System.out.println(a.b == b);
: System.out.println(a.b.a == a);
: System.out.println(b.a == a);
: System.out.println(b.a.b == b);
: 印出來的是:
: false
: true
: false
: true
Dear Pao,
請記得比較物件是用equals方法,不是用==
對於任何物件的製作我們都有責任覆寫hashCode與equals
心有餘力再寫一下toString
另外,Serialization的目的是保持同樣"內容的物件"
我可以有千百個內容相同的物件,但他們的記憶體位置都不同
=========================================================================
import java.io.Serializable;
public class A implements Serializable {
String sign;
public A(String s) {
this.sign = s;
}
public String toString(){
return this.sign;
}
public B b;
}
import java.io.Serializable;
public class B implements Serializable {
String sign;
public A a;
public String toString(){return this.sign;}
public B(String s){
this.sign=s;
}
}
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class NN {
A a;
B b;
public NN() {
a = new A("A@");
b = new B("B@");
a.b = b;
b.a = a;
}
public void makeObjectFile() throws IOException{
FileOutputStream fos = new FileOutputStream("a.object");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(a);
oos.close();
fos = new FileOutputStream("b.object");
oos = new ObjectOutputStream(fos);
oos.writeObject(b);
oos.close();
}
public Object readObjectFile(String name) throws IOException,
ClassNotFoundException{
FileInputStream fis = new FileInputStream(name);
ObjectInputStream ois = new ObjectInputStream(fis);
Object o = ois.readObject();
ois.close();
return o;
}
public static void main(String[] args) throws IOException,
ClassNotFoundException {
NN n = new NN();
n.makeObjectFile();
B b = (B) n.readObjectFile("b.object");
A a = (A) n.readObjectFile("a.object");
System.out.println(b);
System.out.println(b.a);
System.out.println(a.b);
System.out.println(a);
}
}
Result:
B@
A@
B@
A@
--
btw. 偷打一下廣告
[分享] 實作用serialization實現deep clone
http://www.javaworld.com.tw/jute/post/view?
bid=35&id=154519&sty=3&keywords=clone
(http://tinyurl.com/y8tckq)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 163.26.34.20
※ 編輯: qrtt1 來自: 163.26.34.20 (10/26 17:58)
※ 編輯: qrtt1 來自: 163.26.34.20 (10/26 17:58)
討論串 (同標題文章)