在Java中存储状态

Nee*_*raj 5 java persistence

广泛的讨论问题.是否有任何库允许我在Java中存储我的应用程序的执行状态?

例如,我有一个处理文件的应用程序,现在应用程序可能会被迫在某个时刻突然关闭.我想存储有关所有文件已处理的内容以及所有文件尚未处理的信息,以及处理的处理阶段正在进行的流程.

是否已有任何抽象此功能的库或我必须从头开始实现它?

Jal*_*ayn 3

看来您正在寻找的是可以使用Java Serialization API执行的序列化。

如果您决定使用已知的库(例如 Apache Commons Lang 及其SerializationUtils类(该类本身构建在 Java 序列化 API 之上)),您可以编写更少的代码。

使用最新的,将应用程序状态序列化/反序列化到文件中只需几行即可完成。

您唯一需要做的就是创建一个保存应用程序状态的类,我们称其为... ApplicationState:-) 它看起来像这样:

class ApplicationState {

 enum ProcessState {
  READ_DONE,
  PROCESSING_STARTED,
  PROCESSING_ENDED,
  ANOTHER_STATE;
 }

 private List<String> filesDone, filesToDo;
 private String currentlyProcessingFile;
 private ProcessState currentProcessState;
}
Run Code Online (Sandbox Code Playgroud)

有了这样的结构,并使用 SerializationUtils,序列化是通过以下方式完成的:

try {
      ApplicationState state = new ApplicationState();
      ...
      // File to serialize object to
      String fileName = "applicationState.ser";

      // New file output stream for the file
      FileOutputStream fos = new FileOutputStream(fileName);

      // Serialize String
      SerializationUtils.serialize(state, fos);
      fos.close();

      // Open FileInputStream to the file
      FileInputStream fis = new FileInputStream(fileName);

      // Deserialize and cast into String
      String ser = (String) SerializationUtils.deserialize(fis);
      System.out.println(ser);
      fis.close();
    } catch (Exception e) {
      e.printStackTrace();
    }
Run Code Online (Sandbox Code Playgroud)