0

有没有一种方法可以保存变量,例如颜色数组,然后检索它。我正在制作棋盘游戏,我需要能够在任何给定时间保存。如果它不能那样工作,任何人都可以给我任何其他建议我可以使用什么?

4

3 回答 3

2

您可以使用 anObjectOutputStream来编写实现Serializable接口的对象。

FileOutputStream fos = new FileOutputStream("my.save");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(colorsArray);

当然,同样的方式也可以加载:

FileInputStream fis = new FileInputStream("my.save");
ObjectInputStream ois = new ObjectInputStream(fis);
colorsArray = (Color[]) ois.readObject();
于 2013-07-07T19:33:58.023 回答
2

查看 XML 序列化实用程序。如果您的“变量”是一个类实例(或包含在一个类实例中),这应该使保存值变得非常简单。

如果不是,您必须想办法从字符串中写出变量的值并将其解析回来,以便您可以将其保存到文本文件中。

于 2013-07-07T19:35:38.843 回答
1

序列化数据的方法有很多种。这是一个(从我打开的一个小项目中提取的),ArrayList用作数据容器,XMLEncoder/XMLDecoder用于序列化,并将它们放在一个 Zip 中以备不时之需。

public void loadComments() throws FileNotFoundException, IOException {
    File f = getPropertiesFile();
    FileInputStream fis = new FileInputStream(f);
    ZipInputStream zis = new ZipInputStream(fis);
    ZipEntry entry = zis.getNextEntry();

    while (!entry.getName().equals(COMMENTS_ENTRY_NAME)) {
        entry = zis.getNextEntry();
    }
    InputSource is = new InputSource(zis);
    XMLDecoder xmld = new XMLDecoder(is);
    comments = (ArrayList<Comment>) xmld.readObject();
    try {
        fis.close();
    } catch (IOException ex) {
        Logger.getLogger(CommentAssistant.class.getName()).log(Level.SEVERE, null, ex);
    }
}

public void saveComments() throws FileNotFoundException, IOException {
    CommentComparator commentComparator = new CommentComparator();
    Collections.sort(comments, commentComparator);

    File f = getPropertiesFile();
    System.out.println("Save to: " + f.getAbsolutePath());
    File p = f.getParentFile();
    if (!p.exists() && !p.mkdirs()) {
        throw new UnsupportedOperationException(
                "Could not create settings directory: "
                + p.getAbsolutePath());
    }
    FileOutputStream fos = new FileOutputStream(f);
    ZipOutputStream zos = new ZipOutputStream(fos);

    ZipEntry entry = new ZipEntry(COMMENTS_ENTRY_NAME);
    zos.putNextEntry(entry);

    XMLEncoder xmld = new XMLEncoder(zos);
    xmld.writeObject(comments);
    xmld.flush();
    xmld.close();
}
于 2013-07-08T05:50:53.217 回答