用Java编写文件或序列化是否更好?

时间:2013-05-27 08:31:36

标签: java serialization text

我需要创建一个由调度程序定期运行的应用程序。

从运行到运行我需要记住以前操作的结果 - 如果它们将成功完成,是否发送了电子邮件等。

只有在最后一次行动发生时才能保存计数器和日期。

临:

  • 人类可以轻松阅读。

魂斗罗:

  • 需要额外的努力才能转换为类结构。

我认为有可能使用序列化 - 在这种情况下我会收到已经上课的,所以如果将来需要保留一些额外的信息,我只需要重新制作课程,而不是保存系统。

是否可以结合这两个系统的优点?

5 个答案:

答案 0 :(得分:2)

  

它需要额外的努力来转换为类结构。

这不应该增加实际开销。如果您的系统足够小,我建议使用此版本。
如果它真的很复杂,请使用带有ORM(或NoSQL或您喜欢的任何内容)的数据库。那,我认为将结合这两个选项的优点。

答案 1 :(得分:1)

如果您可以将上一个操作的结果包装到一个单个对象中,我建议使用XStream将其序列化为XML(或JSON)。它是迄今为止将Java对象序列化为我曾经使用的平面文件的最简单方法。特别是如果您使用注释:http://x-stream.github.io/annotations-tutorial.html

答案 2 :(得分:1)

根据用例,如果ORM仅用于计划任务的持久性,则ORM可能过度。我认为在使用外部调度时,Java序列化应该足以满足您的需求。请记住二进制兼容性,以允许模型中的未来更改,例如。定义serialVersionUID等See recommendations

您还可以尝试一些简单的XML序列化,例如XStream

答案 3 :(得分:1)

  

只有在最后一次行动发生时才能保存计数器和日期。

应该可以很容易地从文件中读取这两个并用它们实例化一个对象。 如果你序列化,你应该使用记住,如果你的课程发生了变化,就不能反序列化。所以你应该使用xml。 您还可以使用这些信息转储和读取json文件,这也是可读的,并且开销较小。

我会在解决方案中使用一个,我最了解,但我不会使用普通的Java序列化。

答案 4 :(得分:1)

取决于您对结果对象的要求:

  1. 如果将其转换为类似于包含JSON或XML的文件,则可以使用非基于Java的应用程序共享此对象,并可以通过网络轻松传输它们。

  2. 如果使用java序列化序列化结果对象,那么它的客户端只能是基于java的应用程序,但它们比第一个选项更容易共享和传输。

    当然,两个人都有自己的权衡,所以你需要根据你的应用程序的要求进行选择。