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

简介: 每日一道面试题之介绍一下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对象序列化后存储到缓存中,以避免频繁地从数据库中读取数据。需要使用时,从缓存中读取序列化后的字节流,通过反序列化恢复对象状态。

相关文章
|
2月前
|
算法 Java
50道java集合面试题
50道 java 集合面试题
|
16天前
|
设计模式 缓存 安全
提供一些准备Java八股文面试的建议
准备Java八股文面试需系统梳理核心知识点,涵盖Java基础、集合、多线程、JVM、设计模式及主流框架。重在理解原理而非死记硬背,结合源码与实际场景深化认知。通过思维导图构建知识体系,分模块刷题并模拟面试表达,关联项目经验,体现应用能力。关注Java新特性与技术演进,避免知识过时。最终实现从“背答案”到“懂原理、能实战”的转变,提升综合竞争力。(238字)
131 7
|
24天前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
88 1
|
24天前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
93 1
|
4月前
|
Java 数据库连接 数据库
Java 相关知识点总结含基础语法进阶技巧及面试重点知识
本文全面总结了Java核心知识点,涵盖基础语法、面向对象、集合框架、并发编程、网络编程及主流框架如Spring生态、MyBatis等,结合JVM原理与性能优化技巧,并通过一个学生信息管理系统的实战案例,帮助你快速掌握Java开发技能,适合Java学习与面试准备。
184 2
Java 相关知识点总结含基础语法进阶技巧及面试重点知识
|
2月前
|
算法 Java
50道java基础面试题
50道java基础面试题
|
4月前
|
缓存 Java 关系型数据库
Java 面试经验总结与最新 BAT 面试资料整理含核心考点的 Java 面试经验及最新 BAT 面试资料
本文汇总了Java面试经验与BAT等大厂常见面试考点,涵盖心态准备、简历优化、面试技巧及Java基础、多线程、JVM、数据库、框架等核心技术点,并附实际代码示例,助力高效备战Java面试。
126 0
|
4月前
|
缓存 Cloud Native Java
Java 面试微服务架构与云原生技术实操内容及核心考点梳理 Java 面试
本内容涵盖Java面试核心技术实操,包括微服务架构(Spring Cloud Alibaba)、响应式编程(WebFlux)、容器化(Docker+K8s)、函数式编程、多级缓存、分库分表、链路追踪(Skywalking)等大厂高频考点,助你系统提升面试能力。
186 0
|
5月前
|
存储 Java 编译器
说一说关于序列化/反序列化中的细节问题
我是小假 期待与你的下一次相遇 ~
|
5月前
|
JSON Java 数据库连接

热门文章

最新文章

下一篇
开通oss服务