Serializable

Serializable接口的定义:

public interface Serializable {
}

该接口没有任何属性和方法,这样的接口称为标识接口
标识接口:只是起标识作用,而不解决实际问题,实际问题交给其他机制处理。如上课的时候,学生举手问老师问题,老师帮他解答,其实学生举手就是一个标识,说明自己无法解决某个问题,请求帮助。Java中的Serializable接口就是通知JVM,让JVM完成序列化的整个操作。

什么是序列化

序列化就是将对象状态转换为可保存或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。

什么情况下需要序列化

一般,我们写的实体类都需要实现Serializable接口。
当我们需要把对象在网络间进行传输,或者需要持久化对象的时候,需要对对象进行序列化。实现Serializable接口的作用就是可以把对象存到字节流,然后可以恢复。

有时候我们的实体类并没有实现Serializable接口,依旧可以存入数据库,这是因为对于引用类型如Data等,它们所在类已经实现了序列化,而对于基本类型,数据库里面有与之对应的数据结构字段,从我们的类声明来看,我们没有实现serializabel接口,其实是在声明各个不同变量的时候,由具体的数据类型帮助我们实现了序列化操作。

此外,对于NoSql数据库,并没有与Java基本类型对应的数据结构,因此要把对象存入NoSql数据库中,对象所在类就必须实现Serializable接口。

serialversionUID

实现Serializable接口的类,如果没有自己申明一个serialversionUID变量,接口会默认对该类生成一个serialversionUID。
serialversionUID是用来辅助对象的序列化和反序列化过程的,原则上序列化后的数据中的serialversionUID与当前类中的serialversionUID值相同,那么对象在反序列的时候才会成功,因为反序列的时候,会检测序列化数据中的serialversionUID和对象中的serialversionUID值是否相同。


本文转载:CSDN博客