Java - 更新/更改序列化类

时间:2017-07-08 19:18:01

标签: java serialization save load updating

我正在为小型企业创建一个程序。该程序旨在具有较小的模块,这些模块在开发时将被附加到程序的其余部分。它包含“Article”和“Category”类,它包含在“ArticleDatabase”类的列表中。 该类被序列化并保存到硬盘驱动器的文件中。 Register模块已完成,“Receipt”类同样包含在“RegisterDatabase”类的列表中,该类被序列化并保存到单独的文件中。 系统设置以相同的方式保存。

但是,现在我正在设计一个Invoice模块,并发现我需要在“Article”类和System数据中添加一个字段。

现在正在使用寄存器,并且包含需要保存的实际数据,因此我不能只更改类,因为这在我加载时会产生InvalidClassException。

由于我知道这将是未来的常见问题,我需要一些关于如何解决这个问题的建议。

我如何设置一个系统,我可以从类中保存文件,并将数据加载到此类的更新版本或新版本中,还是应该以全新的方式处理?

我已经尝试将旧文件中的数据加载到具有所需字段的重复类中,但是重新配置程序以使用新文件是一项非常麻烦的任务,如果我必须每次都这样做,再次,浪费了很多时间。

用于保存加载的方法如下:

 public void saveArticleDB() throws IOException {
        // Write to disk with FileOutputStream
        FileOutputStream f_out = new FileOutputStream("articles.data");

        // Write object with ObjectOutputStream
        ObjectOutputStream obj_out = new ObjectOutputStream(f_out);

        obj_out.writeObject(MyMain.articleDB);
    }

    public ArticleDB loadArticleDB() throws IOException {

        try {
            FileInputStream f_in = new FileInputStream("articles.data");
            ObjectInputStream obj_in = new ObjectInputStream(f_in);
            Object obj = obj_in.readObject();

            if (obj instanceof ArticleDB) {
                return (ArticleDB) obj;
            } else return null;

        } catch (FileNotFoundException e) {
            new MessageDialog("Article DB - File not found");
            return null;
        } catch (InvalidClassException e) {
            new MessageDialog("Article DB - Class didnt match");
            return null;
        } catch (ClassNotFoundException e) {
            new MessageDialog("Article DB - Class not found");
            return null;
        }
    }

将数据传递到保存文件的类,实现Serializable,这是用于保存和加载类的唯一代码。

这是我第一次尝试序列化,保存和加载,这意味着我对此很陌生,因此很少了解/理解有关这些主题的概念。

非常感谢建议: - )

0 个答案:

没有答案