【发布时间】:2012-05-13 17:02:38
【问题描述】:
据说Java的默认序列化机制效率不高,因为a)它通过通常很慢的反射发现要写入/读取的字段b)它将额外的数据写入流。
提高效率的一种方法是实现 Externalizable 及其 writeExternal/readExternal 方法。
问题来了:如果我改为提供 'writeObject/readObject' 方法并且不在其中调用 deafiltWriteObject/defaultReadObject,那么此机制将不会使用反射来确定要写入/读取的字段,而且它不会' t 将额外的数据写入流(或者会不会?不确定)。那么从效率的角度来看,实现上面提到的 writeObject/readObject 是否与实现 Externalizable 相同?或者后一种选择是否提供了一些更实际的好处,而前者没有?
编辑:当然,不同的是,当实现 readObject/writeObject 的 Serializable 类被子类化时,如果子类有自己的 readObject/writeObject,则不需要调用 super 的 readObject/writeObject。如果超类/子类改为实现 Externalizable,则不是这样。在这种情况下,super 的 writeExternal/readExternal 需要显式调用。 但是,从效率的角度来看,这种差异是无关紧要的。
【问题讨论】:
-
我可以知道您是如何得出在可序列化类中不需要 super.readObject() 的结论的吗?这是否意味着对于每个读/写 Object 方法,编译器都会在第一行添加对 defaultread/writeObject() 方法的调用?
-
@amarnath harish,我相信编译器添加了对 super 的读/写对象的调用。您可以编写一个小代码 sn -p 来验证这一点。 PL。如果您发现其他情况,请告诉我。
标签: java serialization