Serializable接口

Serializable接口

1.什么是Serializable接口

一个对象序列化的接口,一个类只有实现了Serializable接口,它的对象才能被序列化。

2.什么是序列化

序列化是将对象的状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。两个过程结合起来,可以轻松完成存储和传输数据。

3. 为什么需要序列化

当我们需要把对象的状态信息通过网络进行传输,或者需要将对象的状态信息持久化,以便将来使用时都需要把对象进行序列化。

通过查看Serializable接口源码,发现其是一个空接口,什么都没有。我们可以将其理解为一个标识接口。在java中的这个Serializable接口就是给JVM看的,通知JVM,来序列化这个类。

4.serialversionUID变量

如果在继承Serializable接口时,没有定义UID变量,系统会默认生成一个UID。这样在反序列化时可能导致InvalidClassException异常。因此,在继承Serializable接口时,往往自定义一个UID值。

将一个对象写入文件中,然后再从文件中恢复,恢复的内容和之前一样,但是两者是不同的对象,如果没有自定义UID值,那么两次默认得到的UID值很有可能不同,导致反序列化失败。在序列化的时候系统将serialVersionUID写入到序列化的文件中去,当反序列化的时候系统会先去检测文件中的serialVersionUID是否跟当前的文件的serialVersionUID是否一致,如果一直则反序列化成功,否则就说明当前类跟序列化后的类发生了变化。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值