【问题标题】:What's the best way to (de)serialize a Java object to file将Java对象(反)序列化为文件的最佳方法是什么
【发布时间】:2013-01-14 12:21:41
【问题描述】:

我想将 Java 对象保存到文件中(用于稍后的单元测试)。我已经尝试过 JSON,但由于我不拥有我正在序列化的对象的类,因此反序列化变得比它值得付出更多的努力。 (现有类的 getter 和 setter 重载了不同的类型,Jackson 无法弄清楚如何反序列化对象)

现在我正在探索其他途径(即序列化为二进制或其他格式)。我想知道是否有任何东西可以将 Java 对象转储到二进制/文件,以便反序列化变得微不足道。我知道您可以使用Serializable 接口来执行此操作,但同样我不拥有这些未实现此接口的类,因此无法修改它们。

【问题讨论】:

  • 如果它们没有实现Serializable,那么它们就不会被序列化。我会问图书馆的开发人员他们建议你做什么,或者你是否应该做其他事情。

标签: java serialization


【解决方案1】:

您也可以使用XStream,它不依赖于已实现Serializable 接口的类。

【讨论】:

  • +1 我正要发布这个答案。我对 XStream 有很好的体验:它速度快、提供干净的 XML、解决最终字段的问题等。
  • 谢谢,我试试 XStream 看看能不能做 Jackson 做不到的事情 :)
【解决方案2】:

如果它们实现了Serializable,您不需要拥有它们(也不需要修改它们),您可以使用ObjectOutputStream 将它们写入文件,然后使用ObjectInputStream 将它们读回

假设类有合适的 getter 和 setter,你应该没有问题

【讨论】:

  • 这是问题所在:他们没有实现 Serializable。 getter 和 setter 不明确,因此 Jackson 很难弄清楚如何反序列化对象。
  • 您是否严格需要 JSON 输出类型?
【解决方案3】:

您也可以使用Kryo。基准(herehere)说它是最快的序列化/反序列化之一,并且使用的空间也更少。它也不需要实现Serializable。也就是说,我从未亲自使用过它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-31
    • 1970-01-01
    • 2021-10-24
    • 2011-07-09
    • 2010-09-27
    • 1970-01-01
    • 2011-09-23
    相关资源
    最近更新 更多