当前位置: 首页 > news >正文

什么是序列化?为什么需要序列化?

1、典型回答

序列化(Serialization)序列化是将对象转换为可存储或传输的形式的过程(例如: 将对象转换为字节流)

反序列化(Deserialization) 是将序列化后的数据(例如: 二进制文件)转换回原始对象的过程。通过反序列化,可以从存储介质 (如磁盘、数据库) 或通过网络传输的数据中恢复出对象的状态和数据。

序列化使用的主要场景:

  1. 数据持久化:通过序列化,可以将对象保存到磁盘或数据库中,以实现数据的持久化。这样,在程序重新启动后,可以从磁盘或数据库中读取对象,并将其恢复成内存中的对象。
  2. 网络传输:通过序列化,可以将对象转换为字节流,便于在网络中进行传输。网络传输需要将对象打包成字节流,然后发送给接收方,接收方再将字节流进行反序列化,恢复成对象。

2、全面剖析

序列化是指将对象转换为字节流的过程,使得对象能够在网络上传输或保存到磁盘上

在Java 中,通过实现 Serializable 接口来实现序列化,Serializable 接口本身并没有定义任何方法,它只是一个标记接口 (marker interface),用于告诉编译器和运行时环境这个类可以被序列化和反序列化。

序列化实现代码如下:

3、知识扩展

在序列化时,我们除了要实现 Serializable 接口,同时也要添加 serialVersionUID,那么 serialVersionUID 有什么用呢?

serialVersionUID 是用来进行版本控制的静态字段,是为了防止不同版本类冲突,以及类安全的。

具体来说,在进行反序列化时,JVM 会把传来的字节流中的 serialVersionUID 与本地相应实体类的serialVersionUID 进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常,即是 InvalidCastException。这样做是为了保证安全,因为文件存储中的内容可能被篡改

http://www.lryc.cn/news/317270.html

相关文章:

  • Linux本地搭建FastDFS系统
  • docker和docker-compose安装
  • 深入理解Spring的ApplicationContext:案例详解与应用
  • 6.Java并发编程—深入剖析Java Executors:探索创建线程的5种神奇方式
  • 英语阅读挑战
  • 备战蓝桥之思维
  • 09 string的实现
  • Git 进行版本控制时,配置 user.name 和 user.email
  • 传统开发读写优化与HBase
  • 【OpenGL实现 03】纹理贴图原理和实现
  • FDU 2021 | 二叉树关键节点的个数
  • 精读《React Conf 2019 - Day2》
  • 向ChatGPT高效提问模板
  • android metaRTC编译
  • HDFS面试重点
  • Java中的IO流是什么?
  • Spring boot 集成netty实现websocket通信
  • 数码管的动态显示(二)
  • 【JavaScript】数据类型转换 ① ( 隐式转换 和 显式转换 | 常用的 数据类型转换 | 转为 字符串类型 方法 )
  • git学习(创建项目提交代码)
  • Day36:安全开发-JavaEE应用第三方组件Log4j日志FastJson序列化JNDI注入
  • HTML5+CSS3+JS小实例:全屏范围滑块
  • ctf杂项总结
  • openAI key 与ChatGPTPlus的关系,如何升级ChatGPTPLus
  • KB5034441 0x80070643 reagentc.exe 无法更新引导配置数据
  • 全网最最最详细“Jupyter command ‘jupyter-notebook‘ not found.“的解决方案
  • Java中常用的集合及方法(2)
  • 如何轻松打造属于自己的水印相机小程序?
  • Qt+FFmpeg+opengl从零制作视频播放器-12.界面美化
  • 【测试】1. 概念 + 基础篇