2

我正在用 java 编写一个服务器,它允许客户端玩类似于 20 个问题的游戏。游戏本身基本上是一棵二叉树,其中的节点是关于对象的问题,叶子是猜测对象的身份。当游戏猜错时,它需要能够从玩家那里得到正确的答案并将其添加到树中。然后将此数据保存到随机访问文件中。

问题是:如何在文件中表示树,以便以后可以将数据作为树重新访问。

如果您知道在哪里可以找到有关在写入/读取文件时保持诸如树之类的数据结构的信息,请链接它。非常感谢。


感谢大家的快速回答。这是一个学校项目,所以它有一些奇怪的要求,比如使用随机访问文件和 telnet。

4

4 回答 4

2

然后将此数据保存到随机访问文件中。

这是解决问题的艰难方法(我的意思是“随机访问”位)。

您真正要解决的问题是如何保持“复杂”的数据结构。事实上,有很多方法可以做到这一点。这里是其中的一些 ...

  • 使用 Java 持久性。这很容易实现;确保您的数据结构是可序列化的,然后只需几行代码进行序列化,再进行几行反序列化。缺点是:

    • 面对代码更改,序列化对象可能很脆弱。
    • 序列化不是增量的。您每次都写入/读取整个图表。
    • 如果您有多个单独的序列化图,则需要一些方案来命名和管理它们。
  • 使用 XML。这比 Java 持久性要实现更多的工作,但它的优点是不那么脆弱。如果出现问题,您可以使用 XSLT 或文本编辑器修复它。(有一些 XML “绑定”库可以消除大量的胶水编码。)

  • 使用 SQL 数据库。这解决了 Java 持久性的所有缺点,但涉及更多的编码......并使用不同的计算模型来访问持久性数据(查询与图形导航)。

  • 使用数据库和对象关系映射技术;例如 JPA 或 JDO 实现。(休眠是一种流行的选择)。这些以或多或少透明的方式在数据库和内存中数据视图之间架起了桥梁,并避免了您需要在 SQL 数据库和 XML 案例中编写的大量胶水代码。

于 2011-03-02T03:32:06.180 回答
1

我认为您正在寻找序列化。尝试这个:

http://java.sun.com/developer/technicalArticles/Programming/serialization/

于 2011-03-02T02:48:47.300 回答
1

如前所述,序列化是您正在寻找的。它允许您将对象写入文件,并在稍后以最小的努力将其读回。该文件将作为您的对象类型自动读回。这比尝试使用 XML 自己存储对象要容易得多。

于 2011-03-02T02:51:17.933 回答
0

Java 序列化有一些陷阱(比如更新类时)。我会以文本格式序列化。Json 是我在这里的首选,但 xml 和 yaml 也可以。

这样,您将拥有一个不依赖于类的二进制版本的文件。

有几个java库: http: //www.json.org

一些例子:

http://code.google.com/p/json-simple/wiki/DecodingExamples

http://code.google.com/p/json-simple/wiki/EncodingExamples

要保存和读取文件,您可以使用Commons Io

import org.apache.commons.io.FileUtis;
import java.io.File;
...
File dataFile = new File("yourfile.json");
String data = FileUtils.readFileToString(dataFile);

FileUtils.writeStringToFile(dataFile, content);
于 2011-03-03T16:00:16.853 回答