数据传输过程的序列化,你了解吗
今天我们来聊聊序列化:
序列化
Java 是面向对象的语言,与其他语言进行交互(比如与前端 js 进行 http 通信),需要把对象转化成一种通用的格式比如 json(前端显然不认识 Java 对象),从对象到 json 字符串的转换,就是序列化的过程,反过来,从 json 字符串转换成 Java 对象,就是反序列化的过程。
首先来想一个问题,我们为什么要序列化?
因为数据传输过程中,是经过二进制的字节序列传输的;
序列化的本质:
Java 对象 ----->二进制 --->可传输的对象的字节序列
在进程数据传输的过程中,A 进程将 Java 对象发送给 B 进程;
反序列化与序列化的区别
序列化: Java 对象在网络上便于存储,运输反序列化:将对象的字节序列,转化成 Java 对象
场景:我们前端将参数序列化之后,传递给后台接口的入参, 调用方式时,我们会将入参重新解析成一个对象,传入方法进行调用;
对象序列化的两种用途
对于普通的序列化,一般是利用 Java 对象 序列化成对象字节序列,从而完成二进制文件写入,存储到硬盘;
在网络上传递数,使用对象的字节序列,二进制
如何保证序列化的安全
默认都会有一个 serialVersionUID,作为序列化的接口标识
Java 的对象,默认在网络中传输实现序列化的接口 java.io.Serializable;
具体的序列化过程是这样的:
序列化操作的时候系统会把当前类的 serialVersionUID 写入到序列化文件中,当反序列化时系统会去检测文件中的 serialVersionUID,判断它是否与当前类的 serialVersionUID 一致,如果一致就说明序列化类的版本与当前类版本是一样的,可以反序列化成功,否则失败。
如何生成一个 serialVersionUID?
我们可以利用 IDEA 自带的功能:
File/settings
设置之后,选中对应的类名,然后按 alt+enter 快捷键 的情况如下所示
就会生成一个序列化 ID,作为序列化时使用;
版权声明: 本文为 InfoQ 作者【卢卡多多】的原创文章。
原文链接:【http://xie.infoq.cn/article/54137c3fc1b786f6a2c47707a】。文章转载请联系作者。
评论