一、序列化是干什么的?
在jvm中引用数据类型存在于栈中,而new创建出的对象存在于堆中,如果电脑断电那么存在于内存中的对象就会丢失,我们为了将对象保存到磁盘(对象持久化存储)或通过网络传输到远处的其他地方,就必须要求支持持久化存储类实现Serializable接口,Serializable接口就像一个通行证,只有持有这个通信证,jvm才让类创建的对象进行持久化,这个接口将类与一个称为serialVersionUID的变量管关联起来,这个serialVersionUID就是在反序列中用来确定哪个类来加载这个对象。
二、什么情况需要序列化
(1)当你想把内存中的对象状态保存到一个文件中或者数据库中的时候
(2)当你想用套接字在网络上传送对象的时候
(3)当你想通过RMI传输对象的时候
三、JavaBean为什么要实现java.io.Serializable接口实现序列化?
找了个比较好理解的例子:客户端访问了某个能开启会话功能的资源, web服务器就会创建一个与该客户端对应的HttpSession对象,每个HttpSession对象都要站用一定的内存空间。如果在某一时间段内访问站点的用户很多,web服务器内存中就会积累大量的HttpSession对象,消耗大量的服务器内存,即使用户已经离开或者关闭了浏览器,web服务器仍要保留与之对应的HttpSession对象,在他们超时之前,一直占用web服务器内存资源。
web服务器通常将那些暂时不活动但未超时的HttpSession对象转移到文件系统或数据库中保存,服务器要使用他们时再将他们从文件系统或数据库中装载入内存,这种技术称为Session的持久化。
将HttpSession对象保存到文件系统或数据库中,需要采用序列化的方式将HttpSession对象中的每个属性对象保存到文件系统或数据库中;将HttpSession对象从文件系统或数据库中装载如内存时,需要采用反序列化的方式,恢复HttpSession对象中的每个属性对象。所以存储在HttpSession对象中的每个属性对象必须实现Serializable接口。当然如果不是存储在session中的JavaBean可以不用存储哈。
Serializable接口
最新推荐文章于 2024-05-11 16:13:42 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)