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