2011-06-02 89 views
0

我有我保存和恢复一个单独的类:的readResolve与serialisable似乎并不奏效

private void saveData(){ 
    FileOutputStream saveFile; 
    saveFile = this.openFileOutput(STATE_SAVE_FILE_NAME, Context.MODE_PRIVATE); 
    ObjectOutput output = new ObjectOutputStream(saveFile); 
    output.writeObject(deck); 
} 


private void restoreData(){ 
    FileInputStream restoreFile; 

    restoreFile = this.openFileInput(STATE_SAVE_FILE_NAME); 

    ObjectInput input = new ObjectInputStream(restoreFile); 
    deck = (Deck) input.readObject(); 
} 

对象甲板所以我在它定义的readRestore方法的单例:

private Object readResolve() { 
    return deck; 
} 

当我保存有绝对的数据,但恢复没有给我什么。我错过了什么吗?

保存绝对有效,因为我可以保存和恢复其他对象。只有单身人士失败。

回答

1

readResolve()方法会导致反序列化的对象被完全抛弃,而readObject()将返回'deck'的当前值。如果这不是你的意图,它可能应该用来自反序列化对象的数据更新'deck',这是readResolve()方法中的'this'的数据。

+0

为什么所有的例子都显示你只需要返回你从returnInstance(或者等效的)得到的那个呢?示例:http://www.oodesign.com/singleton-pattern.html – theblitz 2011-06-06 06:41:03

+0

@theblitz您的代码与您发布的链接中的内容不同。该示例演示如何继续返回已存在的相同单例实例,以便放弃反序列化的对象并返回getInstance()。你试图通过反序列化来改变单体状态,但是你没有成功,因为你也放弃了序列化对象并返回'deck',实际上它可能仍然是空的。根本不是相同的代码,也不是为了相同的目的。 – EJP 2011-06-06 07:46:15

+0

因此,在第一次打电话时,我应该将“this”复制到“deck”中,然后返回。在随后的电话中只返回“甲板”? – theblitz 2011-06-06 09:09:52