什么在Java中更贵?序列化还是写入文件?

时间:2011-12-31 21:27:18

标签: java serialization file-io

我有一个我需要在本地存储的字符串列表(假设列表可以在10个项目到100个项目之间运行)。我想知道是否应该将列表写入Flat数据库或使用Serialization来展平包含列表的对象?哪个更贵(以CPU为单位)?是什么条件使一个比另一个更贵?

谢谢!

3 个答案:

答案 0 :(得分:1)

特别是因为它们是字符串,所以只需将每行写出一个文件即可。简单,快速,更容易测试。

答案 1 :(得分:0)

我不确定费用,但我相信,因为对象表示很多次包含大量元数据(和结构),这可能导致创建比原始目标数据大的大对象大小。 示例可能是在DOM对象中存储xml结构时 - 内存大小约为原始数据的4倍。

基于以上所述,我认为序列化作为对象可能更昂贵。您可能还想考虑最终产品的消耗。如果您希望生成的文件是人类可读的,则必须序列化String数据以便于阅读。

答案 2 :(得分:0)

  

我有一个我需要在本地存储的字符串列表(假设列表可以在10个项目到100个项目之间运行)。

假设字符串的总长度很小(例如小于10K),用于进行保存的用户空间CPU时间可能是使用序列化或平面文件的几毫秒。换句话说,它会如此之快以至于用户不会注意到差异。

你应该看看在两种选择(和其他)之间进行选择的其他原因:

  • 编写代码有多容易。

  • 备选方案有多少额外的依赖关系。

  • 保存数据文件的人类可读性/可编辑性......如果您需要这样做。

  • 如果你需要这样做,改变保存到文件中的东西的“模式”是多么容易/多难。

  • 是否可以更新一个字符串而不重写整个文件......如果这是相关的。

  • 支持其他内容,例如原子更新,交易,复杂查询等......如果这些是相关的。


如果,尽管我上面说过,你仍然想知道哪个更快(以及多少),然后对它进行基准测试。现实世界的表现将取决于您未指定的因素。

以下是关于如何编写Java基准测试的几个重要参考资料,以便提供有意义的结果。

您可以尝试回答这部分问题:

  

使一个人比另一个人贵一些的条件是什么?

(见上文)