1

我有一个小型桌面应用程序,需要为单个用户保留一些简单但结构化的数据(>10K)。我想要一些关于是否应该序列化对象或构建一些 XML 数据文件的选项。为了简单起见,我开始对事物进行序列化,它确实有效,但我想我也会向社区征求一些反馈意见。是否有我可能遗漏的缺点或潜在问题?

4

6 回答 6

4

XML 是众多序列化的选择之一。你可以做 Java Serializable、XML、JSON、protobuf 或任何你喜欢的东西。我看不出任何陷阱。

XML 的一个优点是您可以使用 JAXB 来编组和解组对象。

于 2012-10-23T12:44:04.680 回答
2

使用 Java 的序列化机制的一个主要缺点是它与 Java 类紧密耦合。如果您在应用程序的新版本中更改了 Java 类,例如添加或删除成员变量,那么您将无法再读取使用旧版本编写的文件。出于这个原因,序列化对于长期存储来说并不是那么好。

Java 序列化数据的格式是非标准格式,这意味着使用非 Java 工具很难对它做任何事情。

于 2012-10-23T12:44:17.710 回答
1

最好的选择是使用基于文件的数据库。我试过的一个是 HSQLDB,它是纯粹基于 java 的。

您可以将它与 JDBC 一起使用,并有权使用 SQL。

您不需要任何数据库安装,它只需要一个 jar 文件,它会使用您的数据创建单独的文件。

示例:http ://www.hsqldb.org/doc/guide/apb.html

注意:序列化不是为了持久化。如果您的课程以某种方式发生变化,反序列化将非常困难,并且与数据丢失一样好。

于 2012-10-23T12:45:15.410 回答
1

第三种选择是使用 JSON,使用 Jackson 解析器快速反序列化到 Java 对象/从 Java 对象序列化。

于 2012-10-23T12:47:53.250 回答
0

我更喜欢 XML 文件来存储数据,因为您自己实现了加载和保存系统。如果您更改对象的结构(例如添加和整数,这不会影响已使用数据的行为),所有通过序列化保存的旧对象都是无用的,因为它们不再适合您的类。但是使用自行设计的 XML 存储系统,您仍然可以从旧保存的数据创建对象。

于 2012-10-23T12:44:15.227 回答
0

听起来你对权衡有很好的理解。序列化更容易,但不如 XML 可扩展。如果这是一个学校项目或供您自己使用的应用程序,我会亲自进行序列化。

您还应该考虑让用户能够阅读/编辑 XML 是否合适。您可能需要采取措施防止这种情况发生。

你应该看看 xStream。我在几个项目中使用过它。

于 2012-10-23T12:46:38.143 回答