您的位置:首页 > 其它

今天来聊聊序列化与烦序列化

2017-06-21 19:39 120 查看
一直都对序列化和反序列化感到挺模糊的,今天在博客园中看到孤傲苍狼写的有关序列化和反序列化的一篇文章,感觉说的挺好的。

加上自己的理解,就像把它写出来。目的就在于加深自己对序列化和反序列化的理解,提前说明,你说我抄袭,我也不反驳。

概念:

序列化:将对象转换为字节序列的过程

通俗来讲就是将你程序中的对象转换成能够被电脑存储的形式

反序列化:将字节序列转换为对象的过程

通俗来讲就是将电脑上的东西转换为对象

简单来说,就是将对象序列化,让它们可以离开内存空间,保存到物理硬盘,这样他们就可以进行长期保存

毕竟内存空间的东西是短暂性的,程序运行完以后就丢失了。

而将对象序列化以后,他们就可以离开内存空间,保存到物理硬盘中,有需要再调回来,不过再调回来的过程就是反序列化了。

实现对象序列化除了可以将对象保存到硬盘之外,它也方便了两个远程进程之间的通信,一方将其序列化,另一方将其反序列化,本质上是一样的。

要想将对象序列化需要用到java.io.ObjectOutputStream这个类,它代表的是对象输出流,它的方法writeObject(Object obj)方法可对参数指定的obj对象进行序列化,把得到的字节

序列写到一个目标输出流中。

而反序列化则是要用到java.ioObjectInputStream这个类,它代表的是对象输入流,它的readObject()方法是从一个源输入流中读取字节序列,再把他们反序列化为一个对象,并将其返回。

实现序列化需要用到两个接口,一个是Serializable,另一个就是Externalizable,后者是继承自前者,实现Externalizable接口的类完全有自身来控制序列化,而实现Serializable接口的类可以采取默认的序列化方式。大多数人会选择Serializable接口。

在进行序列化的过程中,有个需要注意的问题就是序列化版本号的问题。如果,你进行了序列化,编译工具本身如myeclipse会有警告,让你进行序列化版本号的操作。

其实序列化版本号的本质就是让序列化有一个唯一标识,就类似给对象一个ID,对象进行序列化后它有一个ID,这在后期的反序列化过程中直接找这个ID就可以了。

序列化版本号可以解决不同版本的兼容问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: