讲这个之前先来描述一段异常:向后台数据库视图(实体含文件)发起一个查询请求,前台带了个条件和分页就兴高采烈的向业务层扬帆起航了。但是谁曾想,本来顺风顺水的一段请求响应,发生了一件让我对电脑它全家都大不敬了的悬案。明明给了数据库6笔数据,本着有来有回、公平交易的原则它给我返回6条数据这天经地义,当看到list.size=6时,我兴奋滴喝了一口水故作平静继续检查着数据,随后发现系统返回的6条数据是一样的,好比你借人600RMB,别人还了一张100的还有五张连编号都一样的100给你,试问谁敢要。要多反思,于是我找遍了所有相关函数以及处理过程Demo,不断的Debug,查Baidu,执行SQL直到失去耐心。最后才知道,是没有序列化的缘故。
序列化能解决什么样的业务需求?
在java中,我们可以通过多种方式来创建一个对象,并且只要该对象没有被GC回收我们是可以复用这个对象。但是我们创建出来的java对象都存在于JVM的堆内存中,只有当JVM处于运行状态的时候这个对象才能存在,一旦JVM停止运行,该对象也会随之而丢失。
但是在实际开发场景中,我们需要将这些对象持久化下来,让它的存在不再局限于JVM的运行,在需要的时候读出所要的对象。换而言之就是java对象通过持久层框架存入数据库中,这就是序列化的使用场景。
那么,什么是序列化?
专业度娘:序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。就是把对象转换为字节序列的过程。
通