关于java 序列化的原理

      对程序员来讲,Serializable 接口 一直隐藏在我们的代码中,但序列化操作已经封装在我们所使用的框架中,所以序列化已经无需我们亲自实现Serializable接口。但是每次深入了解别人的代码或现使用的框架,对他们使用了Serializable总是特别迷惑。下面我将已程序媛的角度对Serializable接口进行讲解:

     1.对序列化做简单的定义。 Serializable接口 在jdk中 定义为 java.io.Serializable,此接口没有方法、没有属性,仅仅用于标识可序列化。简单来说就是将对象示例保存到文件、数据库,进行传输。需要用时读磁盘或数据库将数据还原。

     2.我们平时在什么场景下用到了序列化。其实我们平时就有用到很多序列化,只是我们不知道它就是序列化而已。目前我所了解到的序列化方式有:二进制、xml、json。其中二进制传输比如图片、peson实例等,通过outputStream、inputStream进行写入和读入。

     3. 关于private static final long serialVersionUID = 7835683779754L。大家对这语句已经太熟悉了。首先讲讲jdk中序列化的原理。比如下面:

旧对象 :public class Person implements Serializable (){ private String name;}    新对象:public class Person implements  Serializable(){ private String name1;}. 改变了里面的属性名。当对象实现  Serializable时,对象已经默认产生了一个serialVersionUID。当你改变属性名时,系统又会重新生成一个serialVersionUID。所以当旧对象要反序列为新对象时,因为SUID不同就会出现报错:java.io.InvalidClassException:Employee; local class incompatible。很多时候为了避免因为新对象属性的增加,我们常常自定义一个serialVersionUID。兼容旧对象的读取,改变或新增的属性名默认为fasle、0、null。

       4.总结。很多时候我们进行的数据传输、保存文件都是使用或间接使用了序列化的接口。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值