实现保存和恢复对象属性状态的最佳方法

时间:2014-10-08 07:06:30

标签: java android serialization

实现保存和恢复/推送和弹出对象属性状态的最佳方法是什么?像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 个答案:

答案 0 :(得分:3)

要保存到文件:使您的课程可序列化

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没有声明long'类型的静态最终serialVersionUID字段,您可以通过添加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。我需要代表,所以如果你愿意,不要忘记接受答案!

答案 1 :(得分:0)

保存到RAM:

您只需将其复制到另一个类变量即可。

但请注意,当您使用等号时,仅复制REFERENCE(您仍在使用相同的变量):

myClass1 = myClass2

在这种情况下,最简单的方法是创建一个新类并分别为所有参数复制参数:

myClass1.myIntValue = myClass2.myIntValue

这样您就可以将而不是引用复制到(相同)变量。