2014-10-08 66 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