Java 序列化和反序列化Serializable 源码分析 - 1

Posted binarylei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 序列化和反序列化Serializable 源码分析 - 1相关的知识,希望对你有一定的参考价值。

Java 序列化和反序列化(二)Serializable 源码分析 - 1

在上一篇文章中讲解了一下 Serializable 的大致用法,本节重点关注 Java 序列化的实现,围绕 ObjectOutputStream#writeObject 方法展开。

1. Java 序列化接口

Java 为了方便开发人员将 Java 对象进行序列化及反序列化提供了一套方便的 API 来支持。其中包括以下接口和类:

技术图片

  • Serializable 和 Externalizable 序列化接口。Serializable 接口没有方法或字段,仅用于标识可序列化的语义,实际上 ObjectOutputStream#writeObject 时通过反射调用 writeObject 方法,如果没有自定义则调用默认的序列化方法。Externalizable 接口该接口中定义了两个扩展的抽象方法:writeExternal 与 readExternal。

  • DataOutput 和 ObjectOutput DataOutput 提供了对 Java 基本类型 byte、short、int、long、float、double、char、boolean 八种基本类型,以及 String 的操作。ObjectOutput 则在 DataOutput 的基础上提供了对 Object 类型的操作,writeObject 最终还是调用 DataOutput 对基本类型的操作方法。

  • ObjectOutputStream 我们一般使用 ObjectOutputStream#writeObject 方法把一个对象进行持久化。ObjectInputStream#readObject 则从持久化存储中把对象读取出来。

  • ObjectStreamClass 和 ObjectStreamField ObjectStreamClass 是类的序列化描述符,包含类描述信息,字段的描述信息和 serialVersionUID。可以使用 lookup 方法找到/创建在此 Java VM 中加载的具体类的 ObjectStreamClass。而 ObjectStreamField 则保存字段的序列化描述符,包括字段名、字段值等。

http://www.importnew.com/17964.html
https://blog.csdn.net/shenchaohao12321/article/details/79504515

https://blog.csdn.net/silentbalanceyh/article/details/8250096


每天用心记录一点点。内容也许不重要,但习惯很重要!

以上是关于Java 序列化和反序列化Serializable 源码分析 - 1的主要内容,如果未能解决你的问题,请参考以下文章

Java序列化和反序列化为什么要实现Serializable接口

Java序列化和反序列化为什么要实现Serializable接口

Java 序列化和反序列化,为什么要实现 Serializable 接口?

面试官问:Java 序列化和反序列化为什么要实现 Serializable 接口?什么鬼??

使用Serializable接口进行JAVA的序列化和反序列化

Java 之 Serializable 序列化和反序列化的概念,作用的通俗易懂的解释