我要通過有效的Java單身,和整個這個例子來。反序列化在Java
class Elvis implements Serializable {
public static final Elvis inst = new Elvis();
private Elvis() {
System.out.println("In elvis constructor ");
}
public static Elvis getInstance() {
return inst;
}
}
根據這本書,當我反序列化,一個新的ELVIS對象應當建立,但我看到的構造是不是在反序列化的時候叫什麼?
這裏是我的代碼序列化,並反序列化。
FileOutputStream fos = new FileOutputStream("myserial1.txt");
ObjectOutputStream oos = new ObjectOutputStream(fos);
Elvis e = Elvis.getInstance();
System.out.println(" e = "+e.getInstance());
oos.writeObject(e);
System.out.println("Serialization done.");
FileInputStream fis = new FileInputStream("myserial1.txt");
ObjectInputStream ois = new ObjectInputStream(fis);
Elvis el = (Elvis) ois.readObject();
System.out.println(" el = "+el.getInstance());
我看到e和e1都引用相同的引用,並且構造函數只被調用一次。
我在這裏誤解的概念?
請幫忙。
非序列化意味着您可以多次執行此操作,這打破了單例的概念。這並不是說你不能做到這一點,但是你做了什麼就會成爲黑客。 –
JBoss智能克隆似乎重用最終字段,也許這對你更好的選擇? http://www.jboss.org/serialization – KIC