速度:Java序列化还是csv?

速度:Java序列化还是csv?,java,serialization,csv,performance,Java,Serialization,Csv,Performance,我有一个庞大的Java简单结构数组,它只包含基本成员,我需要将它们从文件中保存并加载到文件中 什么会更快 实现java.io.Serializable并使用读/写对象或 重写toString/toCSV,添加新构造函数并读取/写入文本文件? 我希望在这个阶段避免二进制流。序列化通常更快。在读回文件时,可以节省手动解析文件的时间。但是,CSV方法将随着时间的推移和程序的不同实现更加灵活。 < P>我建议您编写一个样例测试,看看哪一个更快。 < P>根据最终的应用程序,您也可以考虑使用XScrip

我有一个庞大的Java简单结构数组,它只包含基本成员,我需要将它们从文件中保存并加载到文件中

什么会更快

实现java.io.Serializable并使用读/写对象或 重写toString/toCSV,添加新构造函数并读取/写入文本文件?
我希望在这个阶段避免二进制流。

序列化通常更快。在读回文件时,可以节省手动解析文件的时间。但是,CSV方法将随着时间的推移和程序的不同实现更加灵活。

< P>我建议您编写一个样例测试,看看哪一个更快。

< P>根据最终的应用程序,您也可以考虑使用XScript或类似的库来导出/导入XML。p> Java序列化在幕后做了很多事情,这可能会使实际的反序列化步骤比从文件读取和手动实例化对象更快。然而,有很多微妙的问题需要考虑,如果你打算在“严肃”的工作中使用序列化,你可能应该首先查阅Josh Bloch的“有效Java”,因为他用了整整一章来讨论这个主题

但是,如果您是一次性完成的,并且不希望序列化类的格式发生更改,例如在执行之间不添加方法或字段,那么您可能就可以了


不过,我可能误解了你的问题。”“什么会更快”也可能意味着您想知道哪种方法实施起来更快。可能是你最熟悉的一个。

这里有很多选择。你可能想考虑使用-他们非常快,以及独立于平台。

< P>这可能没关系。如果数组足够小,可以保存在内存中,则可能会很快写入。如果应用程序只写一次数据,那么我只写最简单的


另一方面,如果应用程序寿命长,并且不断地读取和写入数据,那么您将需要进行优化。

我在序列化方面做了很多工作,而我可以在CSV文件中完成这些工作

序列化的好处是速度、类型安全和互操作性RMI、EHcache等。缺点是必须对对象进行版本设置,并且必须编写查看器以启用检查

CSV速度较慢,尺寸可能更大。好处是你可以在文本编辑器、Excel等中查看它们

我会选择CSV,除非速度或大小是个问题


您也可以使用XStream并将其编写为XML或JSON。

为什么只限于这些选择?显而易见的候选者是JSON,它使用简单的数据绑定或。可读性强,比手写CSV更快;plus处理CSV无法处理的情况。可能也比JDK序列化快,如果类以最小的方式更改,则更灵活的序列化也很棘手。

这可能太简单了。让我们浪费其他人的时间,在这里提问吧\o/+1对于测试,任何一种方法都是相同的算法速度,因此答案取决于常数,哪种测试是检查+1是否使用CSV的唯一方法,CSV在未来将更加灵活和可维护,并且不会与您的实现的一个版本绑定:serialVersionUID woes等。如果您选择XML路线,而且它通常不是最快的,那么我强烈建议使用JAXB。主要是因为它是Java6SE中包含的标准,具有出色的映射能力,并且不会将代码与生成的代码弄乱。当我的项目在5上迁移到Java6时值得研究,因为WebSphereDependencyJAXB也可用于Java5,不需要6+1对于JAXB,虽然XStream也很好。不幸的是,PB可能不适合,因为它是严格的模式绑定,问题表明它只是一堆标准类型,除非我误解了它。此外,必须使用PB生成的类型,而不是POJO/包装器。