当前位置: 首页 > 知识库问答 >
问题:

源码分析 - Serializable 接口底层原理?

魏熠彤
2023-11-13

在复习JavaSe的时候,注意到Serializable 接口是空接口。比较好奇,Serializable 底层是如何实现序列化相关操作的?

希望大佬们可以解答一下

共有2个答案

杨柏
2023-11-13

Serializable可以认为只是一个标识而已。
底层实现主要依赖是ObjectOutputStreamObjectInputStream

冯招
2023-11-13

在Java中,Serializable接口是一个标记接口,没有任何方法需要实现。然而,它对Java对象的序列化和反序列化起着至关重要的作用。

首先,让我们来理解一下什么是序列化。序列化是将对象的状态信息转换为字节流的过程,这样就可以将字节流持久化到磁盘上,或者通过网络发送到任何其他运行的Java虚拟机(JVM)中。这个过程通常用于将对象的状态保存到文件或数据库中,或者通过网络将其传输到另一个JVM。

反序列化是序列化的逆过程,即从字节流中读取对象的状态信息,并创建一个新的对象实例。

现在,让我们来看看Serializable接口如何在底层实现序列化。

当一个Java对象被序列化时,JVM会查找该对象中所有引用的其他对象,并递归地将它们也序列化。这个过程会继续下去,直到所有的对象都被序列化。在这个过程中,如果一个对象实现了Serializable接口,那么它就会被序列化。

Serializable接口本身并不执行任何序列化操作。它只是Java虚拟机的一个标记,用于指示一个类的对象可以被序列化。Java虚拟机在序列化对象时,会检查该对象是否实现了Serializable接口。如果对象实现了Serializable接口,那么它的状态就会被序列化。

在序列化的过程中,Java虚拟机使用了一种称为"对象图遍历"的技术来遍历对象图中的所有对象。在这个过程中,Java虚拟机会为每个对象创建一个新的字节流,并保存其状态信息。这个字节流可以用于将对象的状态恢复到原来的状态。

总之,Serializable接口在Java中扮演着重要的角色,它使得Java对象可以被序列化和反序列化。虽然Serializable接口本身没有实现任何序列化操作,但它是一个标记接口,用于指示一个类的对象可以被序列化。Java虚拟机在序列化对象时,会检查该对象是否实现了Serializable接口,如果是,那么它的状态就会被序列化。

 类似资料:
  • 本文向大家介绍java 中RandomAccess接口源码分析,包括了java 中RandomAccess接口源码分析的使用技巧和注意事项,需要的朋友参考一下 java 中RandomAccess接口源码分析 RandomAccess是一个接口,位于java.util包中。 这个接口的作用注释写的很清楚了:  RandomAccess是一个空接口,而空接口的作用一般是起到一个标识的作用。 通俗点讲

  • 主要内容:1.上帝视角,2.disctEntry,3.redisObject,4.string的type和3大编码转换,5.Redis底层的数据结构Redis为kv的,而Redis底层又是由c语言写成的,一切皆字典dict,和java的一切皆对象Object Redis的key类型一般为字符串,value为redis类型RedisObject这里的kv称为dictEntry 相当与java中的Map<String, redisObject> bitmap底层为String类型,hyperlogl

  • 主要内容:一、写在前面,二、ReentrantLock和AQS的关系,三、ReentrantLock加锁和释放锁的底层原理,四、总结一、写在前面 上一篇文章聊了一下java并发中常用的原子类的原理和Java 8的优化,具体请参见文章:《为什么程序员招聘都要5年经验起?因为他们懂Java8底层优化!》。 这篇文章,我们来聊聊面试的时候比较有杀伤力的一个问题:聊聊你对AQS的理解? 之前有同学反馈,去互联网公司面试,面试官聊到并发时就问到了这个问题。当时那位同学内心估计受到了一万点伤害。。。 因为首

  • 本文向大家介绍PHP自定义序列化接口Serializable用法分析,包括了PHP自定义序列化接口Serializable用法分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP自定义序列化接口Serializable用法。分享给大家供大家参考,具体如下: PHP Serializable是自定义序列化的接口。实现此接口的类将不再支持__sleep()和__wakeup(),当类的实

  • 本文的内容基于 MOSN v0.10.0。 在连接管理中我们主要介绍 MOSN 实现连接池的功能,连接池是上下游 MOSN 之间进行长连接复用以提高转发效率与降低时延的关键,MOSN 连接池提供基于 HTTP1, HTTP2, SOFARPC, XProtocol 协议的连接池。 而“健康检查”是一种实时检测上游服务器是否正确提供服务的机制,一般分为“主动健康检查”和“被动健康检查”。主动健康检查

  • 本文向大家介绍SpringMVC底层执行流程及原理解析,包括了SpringMVC底层执行流程及原理解析的使用技巧和注意事项,需要的朋友参考一下 一个简单的HelloSpringMVC程序 先在web,xml中注册一个前端控制器(DispatcherServlet) 配置文件(springmvc-servlet.xml) HandlerMapper是处理器映射器-->根据请求的地址去找处理器(如案例