繁体   English   中英

有什么方法可以在序列化期间存储静态变量的值?

[英]Is there a way by which i can store a value of a static variable during Serializaion?

在Java中,如何在序列化期间存储静态变量的值?

与任何其他字段相同。

static String name;

// assign
name = "Bob";

// get
String n = name;

如果要将其保存到文件中,可以使用关机钩子来写入数据,但是不能保证可以运行该数据。 我会在每次更改时将数据写入文件,并在启动时加载它。

private static final String NAME_FILE = "name.txt";
static String name; static {
  try {
    name = FileUtils.readFileToString(NAME_FILE );
  } catch (IOException e) {
    name = "unknown";
}

public static String getName() { return name; }
public static void setName(String name) { 
   this.name = name;
   try {
      FileUtils.writeStringToFile(NAME_FILE, name);
   } catch(IOException e) {
      log.error(e);
   }
}

您可以在序列化期间通过覆盖wrireObject / readObject来存储变量,但是,这不是一个好主意。 您最好改为序列化静态值。

您不能序列化静态变量,但是只能使用一个类实例而不是静态实例。 单例模式。

我想,问题更多是关于在应用程序启动和关闭之间存储静态字段的值。

(如果这个假设是正确的,那么)您必须将值手动存储到某个外部存储(例如文本文件),然后可以执行静态初始化:

static String field;

static {
   field = readFromFile();
}

UPD :您将必须重写readObject方法,还必须引入一种静态标志变量。 readObject方法中,您将检查该标志,如果未将其设置为“ true”(即,如果尚未初始化静态变量),则将执行上述代码段中的操作。

我还假定如果您有多个线程,则可能需要进行一些同步。

正是这个问题的一个很好的答案:

“我想到的最简单的选择是使用单例而不是静态字段。可以对单例对象进行序列化和反序列化,并且可以管理其生命周期,同时保留静态字段为您提供的'全局状态'。”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM