我有一个小型桌面应用程序需要为单个用户保留一些简单但结构化的数据(> 10K)。我想是否应该序列化对象或构建一些XML数据文件。我开始为简化而序列化事物并且它有效,但我想我也会向社区提出一些反馈意见。我可能缺少哪些缺点或潜在问题?
答案 0 :(得分:4)
XML是许多序列化中的一种选择。您可以执行Java Serializable,XML,JSON,protobuf或其他任何您喜欢的操作。我看不出任何陷阱。
XML的一个优点是您可以使用JAXB来编组和解组对象。
答案 1 :(得分:2)
使用Java的序列化机制的一个主要缺点是它与Java类紧密耦合。如果您创建了已更改Java类的应用程序的新版本,例如添加或删除成员变量,则无法再读取使用旧版本编写的文件。因此,序列化不适合长期存储。
Java序列化数据的格式是非标准格式,这意味着使用非Java工具很难对其进行任何操作。
答案 2 :(得分:1)
最佳选择是使用基于文件的数据库。我尝试的是HSQLDB,它纯粹是基于Java的。
您可以将它与JDBC&有权使用SQL。
你不需要任何数据库安装,只需要一个jar文件就可以了。它会根据您的数据创建单独的文件。
示例:http://www.hsqldb.org/doc/guide/apb.html
注意:序列化不是为了持久性。如果你的课程以某种方式改变,那么反序列化将非常困难。它将与数据丢失一样好。
答案 3 :(得分:1)
第三种方法是使用JSON,使用Jackson解析器从Java对象快速反序列化/序列化。
答案 4 :(得分:0)
我首选XML文件来存储数据,因为您自己实现了加载和保存系统。如果更改对象的结构(例如,添加和整数,不会感染使用数据的行为),则序列化保存的所有旧对象都是无用的,因为它们不再适合您的类。但是,使用自行设计的XML存储系统,您仍然可以从旧保存的数据中创建对象。
答案 5 :(得分:0)
听起来你对交易有很好的理解。序列化更容易,但不像XML那样可扩展。如果这是一个学校项目或一个供您自己使用的应用程序,我个人会选择序列化。
您还应该考虑用户是否适合阅读/编辑XML。您可能希望采取措施来防止这种情况发生。
你应该看一下xStream。我在几个项目中使用过它。