写点什么

数据传输过程的序列化,你了解吗

用户头像
卢卡多多
关注
发布于: 3 小时前
数据传输过程的序列化,你了解吗

今天我们来聊聊序列化:

序列化

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 快捷键 的情况如下所示



  private static final long serialVersionUID = 3382984904663045220L;
复制代码


就会生成一个序列化 ID,作为序列化时使用;

发布于: 3 小时前阅读数: 2
用户头像

卢卡多多

关注

努力寻找生活答案的旅途者 2020.04.12 加入

公众号:卢卡多多,欢迎一起交流学习

评论

发布
暂无评论
数据传输过程的序列化,你了解吗