Serializable保存游戏功能无法正常工作

时间:2014-12-15 10:23:37

标签: java serialization serializable

我试图保存游戏状态但没有成功。

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);
}

}

我收到的指示行的错误是它不是一个合适的构造函数。我完全迷失了。有人可以帮我解决这个问题,或者指出我出错的地方。我不熟悉序列化。

5 个答案:

答案 0 :(得分:0)

您需要为FileOutputStream提供一个File来处理:

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

答案 1 :(得分:0)

documentation您可以看到有2个参数构造函数:

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

所以既然你的编译器抱怨并且我不知道GameBoard是什么(你给你的构造函数提供了什么),请检查你的GameBoard是否有机会。如果没有,那么你应该对此采取一些措施。

答案 2 :(得分:0)

根据documentation fo FileOutputStreamFileOutputStream类有一些构造函数:

  1. Using a File object
  2. Using a File object and a boolean
  3. Using a FileDescriptor object
  4. Using a String object
  5. Using a String object and a boolean value
  6. 由于您使用的是一个带有一个参数的构造函数,因此您使用的是选项1,3或5. board变量的类型为GameBoard,而不是{{1 }},FileFileDescriptor,因此编译器会告诉您没有与变量类型String匹配的构造函数。

    最简单的方法是为board构造函数提供要写入的文件名。其他选项包括FileOutputStream个对象或File

答案 3 :(得分:0)

正如它在javadocs中所说,FileOutputStream期望StringFile错误消息试图告诉您,您正在尝试将对象传递给它没有的构造函数&# 39; t支持。

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

其他建议

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

答案 4 :(得分:0)

有关FileOutputStream的构造函数,请参阅http://docs.oracle.com/javase/7/docs/api/java/io/FileOutputStream.html。第一个将完美无缺:

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