之前在参照开源项目做SpringBoot项目时有一个问题一直困扰着我——为什么在定义的model中,有些需要实现 Serializable 接口,而有些不需要。
- 需不需要是以什么标准来判断的呢?
- 为什么需要实现实体类的序列化呢?
原来是web服务器会将我们暂时用不到但没有超时的 HttpSession 对象转移到文件系统或者数据库中保存,而当又需要用到它们时,可以再将它们从文件系统或者数据库中拿出装载到内存。这种技术被称为 Session 的持久化。
将HttpSession对象保存到文件系统或数据库中,需要采用序列化的方式将HttpSession对象中的每个属性对象保存到文件系统或数据库中;将HttpSession对象从文件系统或数据库中装载如内存时,需要采用反序列化的方式,恢复HttpSession对象中的每个属性对象。所以存储在HttpSession对象中的每个属性对象必须实现Serializable接口。
程序在运行时实例化出对象,这些对象存在于内存中,随着程序运行停止而消失,但如果我们想把某些对象(一般都是各不相同的属性)保存下来或者传输给其他进程,在程序终止运行后这些对象仍然存在,可以在程序再次运行时读取这些对象的信息,或者在其他程序中利用这些保存下来的对象信息恢复成实例对象。这种情况下就要用到对象的序列化和反序列化。
-
问题一:为什么要实现序列化?
答:序列化就是对实例对象的状态(State 对象属性而不包括对象方法)进行通用编码(如格式化的字节码)并保存,以保证对象的完整性和可传递性。简而言之:序列化,就是为了在不同时间或不同平台的JVM之间共享实例对象
-
问题二为何一定要实现 Serializable 才能进行序列化
建议直接看:
https://blog.csdn.net/qq_18298439/article/details/80607057