【问题标题】:Saving 2d array to a disk file将二维数组保存到磁盘文件
【发布时间】:2017-04-11 13:16:39
【问题描述】:

我目前正在开发一个基本的国际象棋程序,该程序允许用户保存当前的游戏并稍后返回并从他们离开的地方继续。唯一的问题是我不知道如何将二维数组保存到磁盘文件中。我更加困惑的是,代码集需要单独写入每个值,并且如果值为“null”则不输出任何内容。我环顾四周,找不到任何真正回答我问题的东西。我在编码方面相当陌生,所以如果这是一个基本问题,我深表歉意。我当前的代码集是:

Path file = Paths.get("fileName");
Files.write(file, lines, Charset.forName("UTF-8"));

PrintWriter save = new PrintWriter(new FileOutputStream(("fileName")));
Path.close();

【问题讨论】:

    标签: java save


    【解决方案1】:

    首先:Java 中的数组总是一个对象;因此,您可以简单地使用 Java serialization 一次性读取/写入整个数组。换句话说:您告诉 Java 将整个数组转换为字节流;然后将这些字节写入文件。后来,你读回来了。而且您根本不必担心空槽。

    你需要做的就是:确保你有一个二维数组的类是Serializable

    如前所述,这是“简单”的解决方案。对于学习,您当然可以实施自己的策略。关键是:在 Java 中没有写入数组数据的“默认”方式。 必须编写接受一/二/任何暗淡数组的代码;从中创建一个表示...将其写入文件。然后您的代码就能够反转该操作。一些伪代码给你一个想法:

    np = compute number of pieces currently found on the board 
    write np
    for col = a to h
      for row = 1 to 8
         if board(row/col) is not empty
           write col, row, piece on that slot
    

    重点是:上面的代码定义从内存板到可以写入文件的东西的映射。这也可以逆转。

    但老实说,你走错了路。您根本不想保存 board(或两个 dim-array)。

    相反,请考虑一下棋盘代表什么......只不过是一系列行动的特定结果。

    当你买一本关于奶酪的书时,你看到关于火柴的讨论,他们只是画单板吗?!不,那么您通常会查看所有动作的序列;以及中间的一些板子。

    长话短说:您设计的一个潜在“基础”元素可能是 move 类;只代表一个动作。

    现在,国际象棋游戏变成了List<Move>(移动对象列表)。只需使 Move 可序列化,您就可以轻松地将整个历史记录读/写到文件中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-08
      • 2016-07-22
      • 2013-12-19
      • 2010-09-23
      • 2010-11-08
      • 2021-11-03
      • 2019-10-30
      • 2018-01-13
      相关资源
      最近更新 更多