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

标签: java serialization serializable


【解决方案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类有几个构造函数:

        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

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

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

        【讨论】:

          【解决方案5】:

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

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

          其他建议

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2023-03-09
            • 1970-01-01
            • 2014-10-02
            • 1970-01-01
            • 1970-01-01
            • 2013-09-07
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多