MST

星途 面试题库

面试题:Java高性能序列化方案之对比 - 基础特性

请简要阐述Java原生序列化、JSON序列化(以Jackson为例)和Protocol Buffers序列化在数据存储格式、可读性方面的主要区别。
25.3万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

数据存储格式

  • Java原生序列化
    • 将对象转换为字节流存储,格式与Java对象结构紧密相关。字节流中包含类的元数据(如类名、字段类型等)和对象的实际数据。例如,对于一个简单的Person类对象,字节流开头会记录Person类相关信息,接着是对象各个字段的值。
    • 它采用一种紧凑的二进制格式,这种格式依赖于Java虚拟机,不同版本的Java可能在序列化格式上有细微差别。
  • JSON序列化(以Jackson为例)
    • 以文本格式存储,数据结构采用键值对形式。例如,对于Person类对象,可能序列化为{"name":"John","age":30} 。JSON格式具有通用性,能被多种编程语言识别和解析。对象的属性作为键,对应的值作为值,支持嵌套结构,如对象包含对象或数组等情况。
    • 格式遵循JSON标准规范,可读性强且易于理解。
  • Protocol Buffers序列化
    • 同样是二进制格式,但比Java原生序列化更紧凑。它使用一种基于标签 - 长度 - 值(TLV)的编码方式。先定义数据结构的.proto文件,生成对应的代码后进行序列化。例如,对于Person类结构定义后,序列化时根据定义的字段顺序和标签来编码数据。
    • 它在存储效率上表现优秀,特别适合在网络传输和存储大量数据时使用。

可读性方面

  • Java原生序列化
    • 可读性差,由于是二进制格式,直接查看字节流难以理解其中含义,需要借助反序列化机制将其还原为Java对象才能理解数据内容。
  • JSON序列化(以Jackson为例)
    • 可读性强,文本格式使得数据内容直观易懂,无论是开发人员还是其他相关人员都能直接阅读和理解其中信息,无需借助特定工具反序列化即可明白数据结构和值。
  • Protocol Buffers序列化
    • 可读性差,二进制格式无法直接阅读和理解,需要通过对应的反序列化工具和.proto定义文件将其还原为可理解的数据结构才能知晓内容。