可序列化的保存游戏功能不起作用[关闭]
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 FileOutputStream
,FileOutputStream
类有几个构造函数:
-
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
,而不是 File
、FileDescriptor
或String
,因此编译器会告诉您没有与变量board
的类型匹配的构造函数。
最简单的方法是给FileOutputStream
构造函数一个要写入的文件名。其他选项是File
对象或FileDescriptor
。
【讨论】:
【参考方案5】:正如 javadocs 中所说,FileOutputStream
需要 String
或 File
错误消息试图告诉您,您正在尝试将对象传递给它不支持的构造函数。
我建议你把它给你想要它写入的文件名。
其他建议
您不需要缓冲 ObjectOutputStream,因为它已经被缓冲了。 当您有缓冲流时,应始终关闭(或刷新),否则您将有未写入的数据,可能文件为空。【讨论】:
以上是关于可序列化的保存游戏功能不起作用[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
Access 2010 VBA:为啥这个表单打开和关闭序列不起作用?