Serializable 问题记录
jdk中很多集合类实现了Serializable接口,它没有成员函数或者成员变量,其目的只为为了实现序列化,简单来说,它只是一个标识。
问题1
Serializable 有什么用,用在哪里?
解决方法
用途
Serializable 用在将一个对象实例的状态写入一个Byte流,并且需要通过这个Byte流将其读取成原先的对象的时候。
- 把对象的状态物理保存:保存到文件或者数据库,供增删改查或者恢复状态。
- 把对象实体通过网络进行传播,分布式应用中、数据持久化的场景中都会使用。
相关知识
- 在使用Serializable接口时,有时会定义一个private修饰的serialVersionUID属性,这个属性也是一个标识。一般建议自己设置其值,但是当没有设置时,JVM会自动生成一个(不推荐,因为这不同的JVM产生的值可能会不一样?)。
情景:当同一个类User的属性产生变化时,如果serialVersionUID不一样,序列化和反序列化的过程会出现异常。比如服务提供方提供一个api,版本1.0,User中的serialVersionUID=1L,调用方使用1.0的api时,User对象的实例可以在二者间正常传输。当服务提供方的api版本升级到2.0后,对User对象做了一些修改,serialVersionUID也随之修改为了2L,而