【问题标题】:writing data in to files with java使用java将数据写入文件
【发布时间】:2011-03-02 02:46:23
【问题描述】:

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

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

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


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

【问题讨论】:

    标签: java data-structures binary-tree random-access


    【解决方案1】:

    然后将这些数据保存到一个随机访问文件中。

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

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

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • @MSX 谢谢。已更新。
        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-11-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多