【问题标题】:Is there a better way... (Java, saving data)有没有更好的方法...(Java,保存数据)
【发布时间】:2023-03-30 02:17:01
【问题描述】:

我目前为工作中的经理编写了一个小程序。它输入一个发票编号并将其创建到一个按钮中,连续向下。然后输入批准日期并将其创建到标签中(与创建的按钮一致)。最后,为过期日期创建一个标签(30 天后)(再次在线创建按钮)。

它将这些数据保存到 3 个文件中(1 个用于按钮,1 个用于第一个标签,一个用于第二个标签)。现在我正在使用“ObjectOutputStream”来保存按钮/标签列表。当程序打开时,它会重新加载文件中的所有数据并将它们“重新打印”到屏幕上。该程序还为用户提供了删除 RO 的选项,在这种情况下,我会重写数据文件减去已删除的 RO。

我只是想知道是否有更好的方法来完成这一切,以及我是否在浪费时间使用这种方法。

【问题讨论】:

    标签: java file save


    【解决方案1】:

    当目标是长期保存数据时,我倾向于使用比 Java 序列化更可重用的数据格式。

    序列化非常适合通过网络发送完整对象或在 JVM 重新启动或临时需要更多内存时快速/临时将完整对象保存在磁盘上等等。但是,长期保存数据并不是很好。当您更改/更新保存数据的类时,现有数据将无法使用。

    考虑 XML(与 JAXB 结合)或 JSON(与 Gson 结合)或嵌入式 SQL 数据库(与 JDBC 结合)。这使您可以更轻松、更精细地控制向后兼容性以及其他程序/语言的可重用性。

    【讨论】:

      【解决方案2】:

      您应该保存数据,而不是组件。您可以在加载时构建按钮、标签等,并且只保存发票编号、批准日期和到期日期吗?

      此外,您可以将所有数据存储在 arraylist 或 hashmap 中,并且只保存该对象,而不是保存 1000 个较小的对象。

      【讨论】:

      • 我对 hashmaps/tables 很不熟悉......那么,我可以在 hashmap 中创建一个新项目,它可以包含 RO #、app date 和 exp date 这三个值吗?
      • 如果您的 RO#s 是唯一的(每个 RO# 只有一个条目),您可以有一个 HashMap 将 RO#s 作为键,并将 [appdate, expdate] 作为价值。更多信息:download.oracle.com/javase/7/docs/api/java/util/HashMap.html
      • 还要注意序列化不需要外部库。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-14
      • 2013-12-09
      相关资源
      最近更新 更多