JAVA中,对象的序列化与serialVersionUID

原创 2013年12月03日 09:50:05

只有可序列化(Serializable)的对象,才可以被文件存储或网络传输。
要想让对象可序列化,只需让它实现序列化接口(implements java.io.Serializable)即可!
而无需重载Serializable的任何方法,它也没方法可被重载:

public interface Serializable {
}

与之类似的,还有个可外部化(Externalizable),其有如下两个方法必须实现(implements):

public interface Externalizable extends java.io.Serializable {
void writeExternal(ObjectOutput out) throws IOException;
void readExternal(ObjectInput in) throws IOException, ClassNotFoundException;
}

数值型的封装类(ByteShortIntegerLongFloatDouble等)继承自Number,它实现了序列化接口。
布尔型的封装类(Boolean),字符的封装类(Character)和字符串的封装类(String),直接实现了序列化接口。
它们也同时都实现了可比较(Comparable<T>)接口。


自己定义的类,实现序列化接口(implements java.io.Serializable)后,系统会提示:
The serializable class AppInfo does not declare a static final serialVersionUID field of type long
可以让Eclipse自动为该类快速生成一个序列化版本唯一代码(serialVersionUID),方法如下:
将光标放到该类(AppInfo)上,按快捷键Ctrl+1,弹出修复选项框;
可以选择Add default serial version ID,这样就会生成一个默认的serialVersionUID:
private static final long serialVersionUID = 1L;
也可以选择Add generated serial version ID(推荐),系统根据类名等信息,生成一个唯一的ID:
private static final long serialVersionUID = -6042866751654850757L;
当类名或成员等信息被修改后,可以保持serialVersionUID不变,以便兼容之前的版本。
如果重新生成了新的serialVersionUID,说明对该类进行了升级,不再兼容之前的版本。
类的serialVersionUID不同后,用新类,去读旧类的数据,会报java.io.InvalidClassException的异常。
这个帖子,说的很详细:http://www.mkyong.com/java-best-practices/understand-the-serialversionuid/

Java对象的serialVersionUID在序列化和反序列化的用途

本博客主要转自如下链接 http://blog.csdn.net/javazejian/article/details/52665164 这篇文章写的不错,但是有些地方我估计博主没有亲自测试,所以有...
  • u011734144
  • u011734144
  • 2016年09月29日 12:44
  • 1559

Java中序列化的serialVersionUID作用

Java序列化是将一个对象编码成一个字节流,反序列化将字节流编码转换成一个对象。 序列化是Java中实现持久化存储的一种方法;为数据传输提供了线路级对象表示法。 Java的序列化机制是通过在运行...
  • z69183787
  • z69183787
  • 2015年07月10日 19:44
  • 3288

serialVersionUID 对序列化,反序列化的影响

说一下个人理解,如果有不对的,希望大家多多指点啊!如果一个类,实现了Serializable接口,则可以被序列化到本地。 此时,会有一个属性,serialVersionUID,来表示该实体类的版本。...
  • a770794164
  • a770794164
  • 2017年02月15日 17:03
  • 899

Java Serializable序列化,反序列化 ,serialVersionUID的作用

Java序列化是指把Java对象转换为字节序列的过程;而Java反序列化是指把字节序列恢复为Java对象的过程。如此可以把对象转换成字节流,可以进行网络传输,保持到本地文件,数据库等,增加对象的生命周...
  • chenchaofuck1
  • chenchaofuck1
  • 2016年03月07日 16:31
  • 1580

Java之序列化SerialVersionUID的作用

先总结下:          Serializable接口 标记类可以被序列化(ObjectOutputStream)和反序列化(ObjectInputStream) 暴露了类的内存代表二进制...
  • lqhed
  • lqhed
  • 2016年06月01日 15:35
  • 386

对Java对象序列化serialVersionUID的理解

serialVersionUID按字面上意思来理解是序列化版本号,用以下例子可以得出serialVersionUID的实际作用 Person类: public class Person impleme...
  • qq_35235028
  • qq_35235028
  • 2017年12月29日 16:54
  • 31

对象序列化为何要定义serialVersionUID

文章出处http://lenjey.iteye.com/blog/513736在很多应用中,需要对某些对象进行序列化,让它们离开内存空间,入住物理硬盘,以便长期保存。比如最常见的是Web服务器中的Se...
  • ZhuangM_888
  • ZhuangM_888
  • 2015年12月16日 16:47
  • 365

对象序列化为何要定义serialVersionUID

在很多应用中,需要对某些对象进行序列化,让它们离开内存空间,入住物理硬盘,以便长期保存。比如最常见的是Web服务器中的Session对象,当有10万用户并发访问,就有可能出现10万个Session对象...
  • qq346610192
  • qq346610192
  • 2016年12月11日 13:16
  • 59

Java对象序列化详解

所有分布式应用常常需要跨平台,跨网络,因此要求所有传的参数、返回值都必须实现序列化。一、定义  序列化:把Java对象转换为字节序列的过程。      反序列化:把字节序列恢复为Java对象的过程...
  • zcl_love_wx
  • zcl_love_wx
  • 2016年08月10日 14:47
  • 4430

Java 对象序列化机制详解

对象序列化的目标:将对象保存到磁盘中,或允许在网络中直接传输对象。 对象序列化机制允许把内存中的Java对象转换成平台无关的二进制流,从而允许把这种二进制流持久的保存在磁盘上,通过网络将这种二进制流...
  • zuiwuyuan
  • zuiwuyuan
  • 2014年10月09日 22:24
  • 1070
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JAVA中,对象的序列化与serialVersionUID
举报原因:
原因补充:

(最多只允许输入30个字)