2014-10-08 65 views
0

實現保存和恢復/推送和彈出對象屬性狀態的最佳方法是什麼?像glPushMatrix()和glPopMatrix()?實現保存和恢復對象屬性狀態的最佳方法

例如:

obj.v1 = false; 
obj.v2 = 0; 
obj.v3 = "init"; 

obj.save(); 
obj.v1 = true; 
obj.v2 = 2; 
obj.v3 = "foo" 
/* Do something... */ 

obj.restore(); 
/* Now v1 = false, v2 = 0, v3 = "init" again */ 

回答

2

要保存到一個文件:讓你的類序列化

package com.yourpackage.name; 
import java.io.Serializable; 

public class myClass implements Serializable { 
    public enum counterType { 
     count_down, 
     count_up 
    } 
    public int myIntValue= 0; 
} 

如果您收到警告「的Serializable類X不聲明static final的serialVersionUID字段類型long',您可以通過爲serialVersionUID添加一個值來解決此問題,例如:

private static final long serialVersionUID = 1234567890abcdefg;

像你一樣聲明你的變量(例如,在您的主要活動):

myClass myClassVariable = new myClass(); 
myClassVariable.myIntValue = 99; 

現在,您可以將數據保存到一個文件中,使用:

try 
{ 
    FileOutputStream myFileOutputStream = new FileOutputStream(getFilesDir() + "file_name.ser"); 
    ObjectOutputStream myObjectOutputStream = new ObjectOutputStream(myFileOutputStream); 
    myObjectOutputStream.writeObject(myClassVariable); 
    myObjectOutputStream.close(); 
} 
catch (Exception e) 
{ 
    Log.e("Error when saving to file.",Log.getStackTraceString(e)); 
} 

要重新加載數據:

try 
{ 
    FileInputStream myFileInputStream = new FileInputStream(getFilesDir() + "file_name.ser"); 
    ObjectInputStream myObjectInputStream = new ObjectInputStream(myFileInputStream); 
    readClassVariable = (myClass) myObjectInputStream.readObject(); 
    myObjectInputStream.close(); 
} 
catch (Exception e) 
{ 
    Log.e("Error when loading from file.",Log.getStackTraceString(e)); 
} 

readClassVariable現在包含您保存類,例如readClassVariable.myIntValue等於99

希望它有幫助。評論歡迎:)

P.S.我需要代表,所以不要忘了接受答案,如果你喜歡它!

+0

是否必須輸出到文件?它可以全部在RAM中完成嗎? – Wonson 2014-10-08 07:51:28

+0

是否可以使用ByteArrayOutputStream而不是FileOutputStream? – Wonson 2014-10-08 08:01:24

+0

要保存到RAM,請參閱下面的更新回答... – EddyBee 2014-10-09 09:06:38

0

要保存到RAM:

您可以簡單地將它複製到另一個類變量。

但是注意,當您使用等號只有參考複製(你還在使用同一個變量工作):

myClass1 = myClass2

在這種情況下,最簡單的是做一個新的類並單獨複製參數所有參數:

myClass1.myIntValue = myClass2.myIntValue 

這樣你複製而不是參考到(相同)變量。

+0

序列化會有更好的性能還是空間友好?由於推送和流行不是關於製作一個備份副本。 – Wonson 2014-10-10 10:21:18

+0

對於保存到文件是的,序列化是最有效的方法。如果你不想保存到文件中,只需使用(本地)變量即可。存儲值... – EddyBee 2014-10-10 12:12:42