口试官:您能说说序列化和反序列化吗?是怎么实现的?什么场景下必要它?
3、并非全部的工具都可以举办序列化,好比:
4、声明为static和transient范例的成员变量不能被序列化。由于static代表类的状态,transient代表工具的姑且数据。 5、序列化运行时会行使一个称为 serialVersionUID 的版本号,并与每个可序列化的类相干联,该序列号在反序列化进程顶用于验证序列化工具的发送者和吸取者是否为该工具加载了与序列化兼容的类。假如吸取者加载的该工具的类的 serialVersionUID 与对应的发送者的类的版本号差异,则反序列化将会导致 InvalidClassException。可序列化类可以通过声明名为 "serialVersionUID" 的字段(该字段必需是静态 (static)、最终 (final) 的 long 型字段)显式声明其本身的 serialVersionUID。 假如序列化的类未显式的声明 serialVersionUID,则序列化运行时将基于该类的各个方面计较该类的默认 serialVersionUID 值,如“Java(TM) 工具序列化类型”中所述。不外,凶猛提议 全部可序列化类都显式声明 serialVersionUID 值,缘故起因是计较默认的 serialVersionUID 对类的具体信息具有较高的敏感性,按照编译器实现的差异也许千差万别,这样在反序列化进程中也许会导请安外的 InvalidClassException。因此,为担保 serialVersionUID 值跨差异 java 编译器实现的同等性,序列化类必需声明一个明晰的 serialVersionUID 值。还凶猛提议行使 private 修饰符表现声明 serialVersionUID(假如也许),缘故起因是这种声明仅应用于直接声明类 -- serialVersionUID 字段作为担任成员没有效处。数组类不能声明一个明晰的 serialVersionUID,因此它们老是具有默认的计较值,可是数组类没有匹配 serialVersionUID 值的要求。 6、Java有许多基本类已经实现了serializable接口,好比String,Vector等。可是也有一些没有实现serializable接口的。 7、假如一个工具的成员变量是一个工具,那么这个工具的数据成员也会被生涯!这是能用序列化办理深拷贝的重要缘故起因。 有了上面关于序列化和反序列化的具体先容,此刻你对平常所用的序列化和反序列化是怎样实现的,什么场景下会行使它,是不是越发深刻了吧
(编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |