我读到了
Externalizable为我们提供了writeExternal()和readExternal()方法,这为我们提供了控制java序列化机制的灵活性,而不是依赖于Java的默认序列化。
但是,如果我实现了可序列化和覆盖readObject(), writeObject(),,那么它是否也意味着我正在自定义序列化过程?
它有何不同?
谢谢。
发布于 2013-08-27 18:51:18
可外可和系列化的区别
虽然Externalizable提供了完整的控制,但在Java中出现瞬态变量和静态变量的情况下,序列化超级类型状态和处理默认值也带来了挑战。如果正确使用,可扩展接口可以提高序列化过程的性能。
所以请使用Externalizable接口
当您对对象的序列化有特殊要求时。例如,您可能有对象的一些安全敏感部分,如密码,您不希望保存这些部分并将其传输到某个地方。或者,从主对象中保存引用的特定对象可能毫无价值,因为它的值在还原后将变得毫无价值。
发布于 2013-08-27 18:51:50
http://docs.oracle.com/javase/tutorial/javabeans/advanced/persistence.html
当您需要序列化默认序列化无法处理的对象时,或者当您需要向不是对象数据成员的序列化流中添加数据时,需要对序列化的对象进行更大的控制,则实现writeObject。实现readObject来重构您用writeObject编写的数据流。 当您需要完全控制bean的序列化时(例如,在写入和读取特定的文件格式时),请使用Externalizable接口。要使用可扩展的接口,您需要实现两个方法: readExternal和writeExternal。实现Externalizable的类必须具有无参数构造函数。
https://stackoverflow.com/questions/18473158
复制相似问题