2014-03-12 60 views
0

为什么只有Serializable标记接口,并且不需要通过合同实现readObject()writeObject()。它会更有意义吗?为什么Serializable接口不需要实现readObject()和writeObject()

+3

这就是它设计的方式。序列化只是一个标记界面。 –

+0

它保持这种方式向后兼容。 –

+0

如果您将其标记为“Serializable”,则可能会对某些数据造成潜在的安全风险,基本上允许网络发送和接收此类数据。 –

回答

2

序列化机制能够在没有任何readObject()writeObject()方法的情况下序列化对象。但它需要你指定它可以或不可以序列化的对象。一些对象保存数据,这是有意义的序列化。其他一些则没有。例如,序列化字符串是有意义的,但是序列化Socket或数据库连接不会。 所以你简单地通过让他们的类实现Serializable接口来标记哪些对象可以被序列化。

如果您想要更多地控制对象的状态被序列化和反序列化的方式,那么您可以使用这两种方法。

+0

但是,如果至少需要空方法实现这些方法,而不是冒着程序员在添加'read/writeObject'时忘记私有访问修饰符或者没有被编译器强制执行而失败的错误,在运行时默默地?这背后的动机是不是通过具有相同安全问题的对象api暴露这些方法? –

+1

问题是接口迫使类定义公共方法。他们不能强迫班级去定义私人班级。而这些方法不应该公开。无论如何,如果这些方法很重要,应该使用单元测试。 –

相关问题