可序列化的保存游戏功能不起作用[关闭]

Posted

技术标签:

【中文标题】可序列化的保存游戏功能不起作用[关闭]【英文标题】:Serializable save game function not working [closed] 【发布时间】:2015-02-13 10:07:12 【问题描述】:

我正在尝试保存游戏状态,但没有成功。

public void saveGame()
board = GameBoard.this;

try (
  OutputStream file = new FileOutputStream(board);    <---- error in this line
  OutputStream buffer = new BufferedOutputStream(file);
  ObjectOutput output = new ObjectOutputStream(buffer);
)
  output.writeObject(game);
  
catch(IOException ex)
  fLogger.log(Level.SEVERE, "Cannot save.", ex);



我收到的错误是它不是一个合适的构造函数。我完全迷路了。有人可以帮我完成这项工作,或者请给我指点我哪里出错了。我不熟悉可序列化。

【问题讨论】:

你能告诉我们board变量的类型吗? 私人游戏板; 你希望它对那个对象做什么?我以为你想写入文件? 我不知道正确的程序,但最好是保存游戏状态。 您的编辑使这个问题变得毫无意义。注意,当您遇到异常时,请打印它。不是您自己设计的一些随机消息。而且这与序列化没有任何关系。 【参考方案1】:

请参阅http://docs.oracle.com/javase/7/docs/api/java/io/FileOutputStream.html 了解 FileOutputStream 的构造函数。第一个会很好:

OutputStream fos = new FileOutputStream(new File("/path/object.dat"));

【讨论】:

【参考方案2】:

您需要为FileOutputStream 提供File 才能使用:

OutputStream file = new FileOutputStream(new File("pathToMyFile.txt"));

【讨论】:

【参考方案3】:

从documentation 可以看出,有 2 个单参数构造函数:

FileOutputStream(File file)
FileOutputStream(FileDescriptor fdObj)
FileOutputStream(String name)

因此,由于您的编译器抱怨并且我不知道 GameBoard 是什么(您将其提供给构造函数),请检查您的 GameBoard 是否有任何机会。如果没有,那么你应该做点什么。

【讨论】:

【参考方案4】:

根据documentation fo FileOutputStreamFileOutputStream类有几个构造函数:

    Using a File object Using a File object and a boolean Using a FileDescriptor object Using a String object Using a String object and a boolean value

由于您使用的是带有一个参数的构造函数,因此您使用的是选项 1、3 或 5。board 变量的类型为 GameBoard,而不是 FileFileDescriptorString,因此编译器会告诉您没有与变量board 的类型匹配的构造函数。

最简单的方法是给FileOutputStream 构造函数一个要写入的文件名。其他选项是File 对象或FileDescriptor

【讨论】:

【参考方案5】:

正如 javadocs 中所说,FileOutputStream 需要 StringFile 错误消息试图告诉您,您正在尝试将对象传递给它不支持的构造函数。

我建议你把它给你想要它写入的文件名。

其他建议

您不需要缓冲 ObjectOutputStream,因为它已经被缓冲了。 当您有缓冲流时,应始终关闭(或刷新),否则您将有未写入的数据,可能文件为空。

【讨论】:

以上是关于可序列化的保存游戏功能不起作用[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

移至顶部功能在 kineticJs 中不起作用 [关闭]

Access 2010 VBA:为啥这个表单打开和关闭序列不起作用?

MS Access - 关闭表单而不保存设计更改,acSaveNo 不起作用

可排序列表在 ipad 上不起作用 [关闭]

为啥列表容器的排序功能不起作用[关闭]

在内部存储中保存/读取位图不起作用