Serializable的做用

前两天接触到VO,DTO,entity这些概念,发现别人的代码中会有 implements serializable这个东西,以前并无见过这种写法,就去了解了一下缘由java

import java.io.Serializable;
 
public class Admin implements Serializable {
}
 

  

Serializable主要做用将类的实例持久化保存,序列化就是保存,反序列化就是读取。保存也不必定保存在本地,也能够保存到远方。类必定要实现Serializable才能够sql

这个介绍很是的不接地气,因而我与去看了几篇博客,是这样理解的:数据库

    序列化的过程,就是一个“freeze”的过程,它将一个对象freeze(冷冻)住,而后进行存储,等到再次须要的时候,再将这个对象de-freeze就能够当即使用。网络

    咱们觉得的没有进行序列化,实际上是在声明的各个不一样变量的时候,由具体的数据类型帮助咱们实现了序列化操做。分布式

    若是有人打开过Serializable接口的源码,就会发现,这个接口实际上是个空接口,那么这个序列化操做,究竟是由谁去实现了呢?其实,看一下接口的注释说明就知道,当咱们让实体类实现Serializable接口时,实际上是在告诉JVM此类可被序列化,可被默认的序列化机制序列化。ide

为何须要序列化
1,存储对象在存储介质中,以便在下次使用的时候,能够很快捷的重建一个副本。也就是When the resulting series of bits is reread according to the serialization format, it can be used to create a semantically identical clone of the original object.oop

问题:我没有实现序列化的时候,我同样能够存入到个人sqlserver或者MySQL、Oracle数据库中啊,为何必定要序列化才能存储呢????sqlserver

2,便于数据传输,尤为是在远程调用的时候!云计算

 

其实说了这么多,想表达的意思就是:orm

Serializable接口是一个里面什么都没有的接口
它的源代码是public interface Serializable{},即什么都没有。

若是一个接口里面什么内容都没有,那么这个接口是一个标识接口,好比,一个学生遇到一个问题,排错排了几天也没解决,此时,她举手了(示意我去帮他解决),而后我过去,帮他解决了,那么这个举手其实就是一个标识,本身不能解决的问题标示我去帮他解决,在Java中的这个Serializable接口是给JVM看的,告诉JVM,我不作这个类的序列化了,你(JVM)给我序列化,序列化就是变成二进制流,好比云计算、Hadoop,特别是Hadoop彻底就是分布式环境,那么就要涉及到对象要在网络中传输,里面的全是二进制流,固然你来作这个序列化操做也能够,可是这个类里面可能还有一个类,若是你把外面的类对象Person变成二进制,那么里面也要序列化(这要用到深度遍历,很麻烦),干脆告诉JVM,让他来帮你作。
serializable接口就是Java提供用来进行高效率的异地共享实例对象的机制,实现这个接口便可。

序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,能够轻松地存储和传输数据。

相关文章
相关标签/搜索