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

每日一道面试题之介绍一下Java的序列化和反序列化!

什么是序列化?

序列化将对象转换为容易传输的格式的过程,它是一种用来处理对象流的机制,将对象的内容流化,从而使流化后的对象传输于网络之间,以便它们可以在网络上传输或在磁盘上存储。反序列化是将序列化后的数据转换成原始对象或数据结构的过程

什么是java序列化与反序列化?

对象序列化机制(object serialization)是java语言内建的一种对象持久化方式,通过对象序列化,可以将对象的状态信息保存为字节序列,当我们需要复用时,只需要将这个字节序列通过反序列化的方式转换成对象

那么什么是java反序列化呢?

Java反序列化就是把字节序列恢复为Java对象的过程。

从java的角度分析,使用序列化和反序列化的作用是什么?

在Java中,我们可以通过多种方式来创建对象,并且只要对象没有被回收,那么我们就可以反复使用该对象,但这些对象都存在于JVM中的堆内存,因此只有JVM处于运行状态的时候,这些对象才可能存在,而一旦JVM停止,这些对象也就随之消失,但在实际的开发中,我们都需要将这些对象持久化下来,并且在需要的时候将对象重新读取出来Java的序列化正好可以帮助我们实现该功能,对象的序列化可以很容易的在JVM中的活动对象和字节数组(流)之间进行转换,并且在传递和保存对象时,通过序列化能够保证对象的完整性和可传递性,序列化是为了解决在对对象流进行读写操作时所引发的问题,但在序列化中,对象被转换成字节流或其他传输格式,而反序列化正好可以实现在接收端或读取端将这些数据还原成原始的对象或数据结构,以便对其进行处理和使用。

Java序列化与反序列化是如何实现的?

序列化实现方法为对象通过实现Serializable接口,但该接口并没有需要实现的方法,implement Serializable只是为了标注该对象是可被序列化的,其序列化的过程为使用一个输出流(FileOutputStream)来构造一个ObjectOutputStream对象[字符输出的对象流]接着使用ObjectOutputStream对象的writeObejct方法,就可以将对象到磁盘即保存其状态,而反序列化的过程为使用一个输入流FileInputStream来构造一个ObjectInputStream对象[字符输入的对象流],接着使用ObjectInputStream对象的readObject方法,从文件中读取序列化的对象,最后将返回的对象强制转换为原对象类型。

因此,在java中,我们使用ObjectOutputStream类实现序列化ObjectInputStream类实现反序列化。

Java序列化与反序列化的应用:

序列化和反序列化主要应用于以下常见的场景:

网络传输:在网络传输中,使用序列化将Java对象转换为字节流,然后通过网络传输到另一台计算机上接收方通过反序列化将字节流转换为Java对象,从而实现网络传输。

持久化存储:在持久化存储中,将Java对象序列化后存储到磁盘或数据库中,以便下次使用时,可以通过反序列化恢复对象状态。

跨语言传输:在不同编程语言之间传输数据时,可以使用序列化将Java对象转换为通用的字节流格式,然后在其他语言中进行反序列化,以实现跨语言传输。

缓存处理:在缓存处理中,将Java对象序列化后存储到缓存中,以避免频繁地从数据库中读取数据。需要使用时,从缓存中读取序列化后的字节流,通过反序列化恢复对象状态。

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

相关文章:

  • Netty实战(十一)
  • Qos服务质量、心跳机制、保留消息,遗嘱信息,用户密码认证
  • MATLAB 之 线性方程组求解
  • 华为OD机试真题 Java 实现【字符串序列判定】【2022Q4 100分】,附详细解题思路
  • taro使用小记 —— 持续更新
  • 【LeetCode】110. 平衡二叉树
  • SQL视图、存储过程、触发器
  • DNS隧道穿透
  • 1.2 Scala变量与数据类型
  • 深入探讨软件测试的质量度量指标
  • 6.12作业
  • RabbitMQ集群部署之镜像模式
  • 【算法】Remove Zero Sum Consecutive Nodes from Linked List 从链表中删去总和值为零的连续节点
  • 音悦台项目测试报告
  • 数据库存储过程和函数
  • Spring依赖注入有哪些?各有什么优缺点?
  • java八股文-并发篇
  • Elasticsearch8.6.0安装
  • Vue - 第五天 动态组件 插槽 自定义指令
  • 如何开展web自动化测试
  • 【博学谷学习记录】超强总结,用心分享 | 架构师 Maven学习总结
  • PPT里文字太多如何排版-一口气教你7种布局瞬间让PPT高大上起来
  • Whistle(基于 Node 实现的跨平台抓包调试工具)的使用
  • 数学模型:Python实现非线性规划
  • Docker网路模型(四)使用 bridge 网络
  • 数据结构与算法之美 | 排序(2)
  • 【外企面试系列】必备口语短语与例句 - A系列
  • Java使用Opencv进行大图找小图并使用其找图功能进行bilibili视频下载案例
  • 肠道健康从核心菌属开始:肠道菌群的关键
  • 深度学习实战37-NASNet(具有自动搜索能力的神经网络模型)的搭建与实战应用