一、核心概述
Zookeeper 的序列化机制主要用于网络通信和数据存储,相关核心类与接口集中在 org.apache.zookeeper.jute 包(文档中提及zookeeper.jute,实际标准包名为org.apache.zookeeper.jute),核心接口包括 InputArchive、OutputArchive、Index、Record,共同支撑序列化与反序列化流程。
二、核心接口与实现类
1. InputArchive(反序列化核心接口)
- 作用:所有反序列化器必须实现的接口,定义了从数据流中读取各类数据的标准方法。
- 核心方法:
- 基础数据类型读取:
readByte()、readBool()、readInt()、readLong()、readFloat()、readDouble()、readString()。 - 缓冲与复杂结构读取:
readBuffer()(读取字节缓冲)、readRecord()(读取记录)、startRecord()/endRecord()(开始 / 结束读取记录)、startVector()/endVector()(开始 / 结束读取向量)、startMap()/endMap()(开始 / 结束读取 Map)。
- 实现类(对应不同数据格式):
BinaryInputArchive:基于二进制流的反序列化,内部包含BinaryIndex(索引迭代器),通过DataInput读取字节。CsvInputArchive:基于 CSV 格式的反序列化,使用PushbackReader处理流,内部有CsvIndex。XmlInputArchive:基于 XML 格式的反序列化,依赖 SAX 解析,内部有XmlIndex。
2. OutputArchive(序列化核心接口)
- 作用:所有序列化器必须实现的接口,定义了向数据流中写入各类数据的标准方法。
- 核心方法:
- 基础数据类型写入:
writeByte()、writeBool()、writeInt()、writeLong()、writeFloat()、writeDouble()、writeString()。 - 缓冲与复杂结构写入:
writeBuffer()(写入字节缓冲)、writeRecord()(写入记录)、startRecord()/endRecord()(开始 / 结束写入记录)、startVector()/endVector()(开始 / 结束写入向量)、startMap()/endMap()(开始 / 结束写入 Map)。
- 实现类(与 InputArchive 一一对应):
BinaryOutputArchive(二进制格式序列化)。CsvOutputArchive(CSV 格式序列化)。XmlOutputArchive(XML 格式序列化)。
3. Index(迭代辅助接口)
- 作用:作为反序列化过程中的迭代器,用于遍历向量、Map 等复杂结构的数据。
- 核心方法:
done()(判断迭代是否结束)、incr()(迭代递增)。 - 实现类:与 InputArchive 的实现类对应,即
BinaryIndex、CsvIndex、XmlIndex。
4. Record(数据载体接口)
- 作用:所有需要网络传输或本地存储的数据类型,必须实现该接口,是序列化的 “数据容器”。
- 核心要求:实现类必须重写
serialize()(序列化方法)和deserialize()(反序列化方法),完成数据与流的转换。
三、使用逻辑与示例
- 搭配规则:
OutputArchive(序列化写入)与InputArchive(反序列化读取)需成对使用,例如二进制序列化对应二进制反序列化。 - 示例效果:通过接口搭配可实现基础数据类型(布尔、字符串、数字)、复杂结构(对象、Map、向量)的序列化与反序列化,示例输出包含数据校验结果及键值对、对象属性等内容。
四、核心总结
- 序列化核心包:
org.apache.zookeeper.jute。 - 四大核心组件:
InputArchive:反序列化读操作接口。OutputArchive:序列化写操作接口。Index:复杂结构迭代辅助接口。Record:可序列化数据的载体接口。
- 格式支持:通过三类实现类,支持二进制、CSV、XML 三种数据格式的序列化 / 反序列化。