即使在简单的POJO Java类中实现java.io.Serializable也是最佳实践吗?

时间:2008-10-20 17:42:41

标签: java serialization

一般来说,让简单的POJO Java类实现java.io.Serializable是最佳做法吗?

4 个答案:

答案 0 :(得分:13)

一般不是。约书亚布洛赫对implement Serializable judiciously说。他描述的缺点摘要:

  • 降低了以后更改类实现的灵活性 - 序列化表单是类API的一部分
  • 更容易出现一些错误和安全漏洞 - 攻击者可以访问序列化字节流中的类内部
  • 增加了测试负担 - 现在你必须测试序列化!
  • 负担子类的作者 - 他们必须使他们的子类Serializable

当然,有时你需要一个POJO来实现Serializable,比如RMI,但如果不需要,你的代码会更简单,更安全。

答案 1 :(得分:4)

仅当您需要能够序列化它们时。否则为not worth the effort

答案 2 :(得分:3)

这更多地取决于需求。在Web应用程序的上下文中,一些Web服务器(例如Tomcat 6)甚至强制要求序列化我们在会话中存储其对象的类。

答案 3 :(得分:0)

我已经做了一件事来解决序列化表单不向后兼容(比如在正在运行的系统上动态重新加载类)的事实,是将我要保存的字段加载到一个hashmap然后序列化它。这样,即使存在缺少的字段,我也可以始终反序列化数据。您可能必须提供缺失密钥的默认值,但这比搞乱字段顺序要好。