据说Java的默认序列化机制效率不高,因为(A)它发现要通过反射写入/读取哪些字段,这通常比较慢( b)它将额外的数据写入流。
使其更有效的一种方法是实现Externalizable及其写外部/readExternal方法。
这里有一个问题:如果我提供'writeObject/readObject‘方法,而不是在其中调用deafiltWriteObject/defaultReadObject,那么这个机制将不会使用反射来确定要写入/读取的字段,而且它不会写入额外的数据流(或者会吗?不确定)。因此,从效率的角度来看,实现上面提到的写对象/readObject是否与实现Externalizable相同?还是后者提供了一些更实际的好处,而前者却没有?
编辑:当然,区别在于实现readObject/writeObject的可序列化类被子类化,如果子类有自己的readObject/writeObject,则不需要调用Super‘writeObject/writeObject。如果超类/子类相反地实现了Externalizable,则不是这样。在这种情况下,需要显式地调用超级程序的writeExternal/readExternal。然而,从效率的角度来看,这种差异是无关紧要的。
发布于 2012-05-04 06:45:23
在选择下一步要调用哪个类/writeObject/readObject时,仍然有些头脑发热。但它明显减少了。
这可以执行与Externalizable相同的操作,这取决于您正在做什么,以及您是否使用它提供的额外选项。例如,readObject假设您每次创建一个新对象,Externalizable有readResolve,这意味着您可以重用对象。
http://docs.oracle.com/javase/1.5.0/docs/guide/serialization/spec/input.html
在许多情况下,回收对象是加快反序列化的“下一步”。(假设这是你的选择)
http://vanillajava.blogspot.co.uk/2011/10/recycling-objects-to-improve.html
https://stackoverflow.com/questions/10443951
复制相似问题