【问题标题】:Preferred data-format for user-data in java applications?java应用程序中用户数据的首选数据格式?
【发布时间】:2010-06-03 20:12:14
【问题描述】:

我目前正在用 java 开发一个桌面应用程序,它存储用户数据,例如 ftp 服务器的书签。在决定如何保存这些信息时,我最终使用了 xml,只是因为我喜欢 xpath 的工作方式。我也在考虑json,看起来更轻量级。

在 Java 桌面应用程序中存储数据的首选方式是什么(通常),为什么? java-persistence怎么样,有什么值得注意的优点吗?用户数据的大小有多重要?并非总是可以将数据存储在数据库中(或者更可取),并且根据我的经验,xml 不能很好地扩展。让我知道你的想法!

还没有人提到过 json,这让我很吃惊。没有适合的情况?

【问题讨论】:

    标签: java desktop-application dataformat


    【解决方案1】:

    只要有效,就可以为您提供良好的性能并且需要最少的代码。

    Java 序列化很容易。除非您有大对象图,否则应该很快。如果您想与另一种语言互操作或希望文件是人类可读/可编辑的,它可能不起作用。它可能很脆。

    XML 解决了多语言互操作,可以被人类阅读和编辑。如果您使用 Java,Jaxb 非常非常简单和直接。如果您需要存储大量设置,则可能需要 SAX/StAX。您可能想在非常奇怪的情况下使用 DOM/JDom。

    如果您要存储和查询大量设置,则可以选择嵌入式 SQL 数据库。我推荐 H2。

    【讨论】:

    • +1 用于 JAXB。让您的用户破解程序的文件是有礼貌的 - 尝试使用记事本和序列化对象 blob 进行 那个 :)
    • DOM 在 java 中似乎很慢。几乎要慢到认真使用。我无法想象为什么。
    • @Frederik Wordenskjold:不过有很多第三方实现。
    【解决方案2】:

    有时,只需使用属性文件就足够了。

    属性文件是由键/值对组成的文本文件。 java.util.Properties 类用于与属性文件交互。但是,它不适合存储事物列表,因为一切都是键/值对。

    【讨论】:

    • 似乎是存储小型数据文件的明显方式,例如用户偏好等。
    • 啊!我知道我会错过一些明显的东西!点赞!尽管对于复杂的结构,.properties 文件可能不适合,但在很多情况下它们都非常方便。
    【解决方案3】:

    没有办法说“一般”我更喜欢哪个。即使在单个应用程序中,我也可能有几种不同的方法来序列化用户数据。以电脑游戏为例。我希望存储我的游戏偏好,以便我可以使用文本编辑器对其进行编辑。我希望存储我的许可数据,以便它可以在全球范围内访问。我希望存储我的高分数据,以便没有人可以有效地对其进行编辑。我希望存储我保存的游戏状态,以便读取和写入非常快。这四种不同的要求可能会在同一个应用中产生四种不同的解决方案。

    【讨论】:

      【解决方案4】:

      有两个方面:

      1. 如果您想使用 RDBMS 快速实现它,请使用像 SQLite 这样的嵌入式数据库。这被许多桌面应用程序使用,例如Firefox

      2. 如果性能是一个问题,那么使用 go for 嵌入式key-value pairs 类型的存储解决方案。

      【讨论】:

      • +1 用于 SQLite。这是我的偏好。良好的性能和技术用户可破解,加上命令行可更新。
      • 有很多包装器,比如上面@ZZ Coder 所说的sqljet。
      【解决方案5】:

      如果我们不介意用户调整数据,我们会使用 XML。对于更复杂的数据,我们使用 SQLite。你可以在这里找到 Java 实现,

      http://sqljet.com/

      【讨论】:

        【解决方案6】:

        无论使用什么格式构建文件,最好将文件存储在用户的主目录中:

        String userHome = System.getProperty("user.home"); // "/home/myusername"
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-12-02
          • 1970-01-01
          • 2013-07-02
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多