JAVA中,序列化接口的做用

     Java 规定的内部机制,实现 Serializable 接口就好了,这个接口只是个标记性的接口,表示类的设计者已经容许这个类型的对象被序列化写入磁盘或经过网络发送,对于有保密要求的东西通常不实现这个接口防止无心间复制到 jvm 内存以外。若是一个类型的多数字段能够复制但个别字段不用复制(好比,它其实是经过其它字段计算出来的),咱们能够把它标记为 transient
默认的 serialization 对类的结构有要求,通常未来版本升级了致使服务端和客户版本不同,或者你用新版本读取一个之前旧版本写入磁盘的序列化的对象的话,须要这两个版本是兼容的,达到这个要求至少包括下面这个字段,而且新旧两个版本的类中它的值应该是同样的,其它特殊状况规范也有办法作到,好比你的结构变了,之前 name / phone 都是 A 的字段,后来新版本建立了一个内部类叫 Contact name phone
并到这两个字段移到内部类 Contact 中去了的话,Java 也有办法在新版本中提供自定义 readObject/writeObject 这个过程来确保兼容旧版本。

private static final long serialVersionUID; //
在一个类的多个版本中要相同的值,对于不它的类中,它们的值不要求惟一。
http://java.sun.com/developer/technicalArticles/Programming/serialization/
java

serialVersionUID做用:序列化时为了保持版本的兼容性,即在版本升级时反序列化仍保持对象的惟一性。 有两种生成方式: 一个是默认的1L,好比:private static final long se... 网络

serialVersionUID做用:
序列化时为了保持版本的兼容性,即在版本升级时反序列化仍保持对象的惟一性。

有两种生成方式:

一个是默认的1L,好比:
private static final long serialVersionUID = 1L;
一个是根据类名、接口名、成员方法及属性等来生成一个64位的哈希字段,好比:

private static final long serialVersionUID = xxxxL;
当你一个类实现了Serializable接口,若是没有定义serialVersionUIDEclipse会提供这个

提示功能告诉你去定义 。在Eclipse中点击类中warning的图标一下,Eclipse就会

自动给定两种生成的方式。若是不想定义它,在Eclipse的设置中也

能够把它关掉的,设置以下:

Window ==> Preferences ==> Java ==> Compiler ==> Error/Warnings ==>
Potential programming problems
Serializable class without serialVersionUIDwarning改为ignore便可。

若是你没有考虑到兼容性问题时,就把它关掉,不过有这个功能是好的,只要任何类别实现了Serializable这个接口的话,若是没有加入serialVersionUIDEclipse都会给你warning提示,这个serialVersionUID为了让该类别Serializable向后兼容。

若是你的类Serialized存到硬盘上面后,但是后来你却更改了类别的field(增长或减小或更名),当你Deserialize时,就会出现Exception的,这样就会形成不兼容性的问题。

但当serialVersionUID相同时,它就会将不同的fieldtype的预设值Deserialize,可避开不兼容性问题。
jvm

相关文章
相关标签/搜索