Zookeeper序列化

简介: 本文从源码角度解析Zookeeper的序列化机制,重点分析jute包中的InputArchive和OutputArchive接口及其实现类,涵盖基本类型的读写、记录、向量与Map的序列化与反序列化过程,揭示其在网络通信与数据存储中的核心作用。

一、前言  在完成了前面的理论学习后,现在可以从源码角度来解析Zookeeper的细节,首先笔者想从序列化入手,因为在网络通信、数据存储中都用到了序列化,下面开始分析。二、序列化  序列化主要在zookeeper.jute包中,其中涉及的主要接口如下    · InputArchive    · OutputArchive    · Index    · Record2.1 InputArchive  其是所有反序列化器都需要实现的接口,其方法如下 InputArchive的类结构如下  1. BinaryInputArchive 2. CsvInputArchive 3. XmlInputArchive2.2 OutputArchive  其是所有序列化器都需要实现此接口,其方法如下。  OutputArchive的类结构如下  1. BinaryOutputArchive 2. CsvOutputArchive 

Java

运行代码复制代码

public interface InputArchive {

   // 读取byte类型

   public byte readByte(String tag) throws IOException;

   // 读取boolean类型

   public boolean readBool(String tag) throws IOException;

   // 读取int类型

   public int readInt(String tag) throws IOException;

   // 读取long类型

   public long readLong(String tag) throws IOException;

   // 读取float类型

   public float readFloat(String tag) throws IOException;

   // 读取double类型

   public double readDouble(String tag) throws IOException;

   // 读取String类型

   public String readString(String tag) throws IOException;

   // 通过缓冲方式读取

   public byte[] readBuffer(String tag) throws IOException;

   // 开始读取记录

   public void readRecord(Record r, String tag) throws IOException;

   // 开始读取记录

   public void startRecord(String tag) throws IOException;

   // 结束读取记录

   public void endRecord(String tag) throws IOException;

   // 开始读取向量

   public Index startVector(String tag) throws IOException;

   // 结束读取向量

   public void endVector(String tag) throws IOException;

   // 开始读取Map

   public Index startMap(String tag) throws IOException;

   // 结束读取Map

   public void endMap(String tag) throws IOException;

}


/**

stream.print(Utils.toCSVString(s));

throwExceptionOnError(tag);

}

// 写Buffer类型

public void writeBuffer(byte buf[], String tag)

throws IOException {

printCommaUnlessFirst();

stream.print(Utils.toCSVBuffer(buf));

throwExceptionOnError(tag);

}

// 写Record类型

public void writeRecord(Record r, String tag) throws IOException {

if (r == null) {

return;

}

r.serialize(this, tag);

}

// 开始写Record

public void startRecord(Record r, String tag) throws IOException {

if (tag != null && !"".equals(tag)) {

printCommaUnlessFirst();

stream.print("s{");

isFirst = true;

}

}

// 结束写Record

public void endRecord(Record r, String tag) throws IOException {

if (tag == null || "".equals(tag)) {

stream.print("\n");

isFirst = true;

} else {

stream.print("}");

isFirst = false;

}

}

// 开始写Vector

public void startVector(List v, String tag) throws IOException {

printCommaUnlessFirst();

stream.print("v{");

isFirst = true;

}

// 结束写Vector

public void endVector(List v, String tag) throws IOException {

stream.print("}");

isFirst = false;

}

// 开始写Map

public void startMap(TreeMap v, String tag) throws IOException {

printCommaUnlessFirst();

stream.print("m{");

isFirst = true;

}

// 结束写Map

public void endMap(TreeMap v, String tag) throws IOException {

stream.print("}");

相关文章
|
13天前
|
数据采集 人工智能 安全
|
8天前
|
编解码 人工智能 自然语言处理
⚽阿里云百炼通义万相 2.6 视频生成玩法手册
通义万相Wan 2.6是全球首个支持角色扮演的AI视频生成模型,可基于参考视频形象与音色生成多角色合拍、多镜头叙事的15秒长视频,实现声画同步、智能分镜,适用于影视创作、营销展示等场景。
656 4
|
8天前
|
机器学习/深度学习 人工智能 前端开发
构建AI智能体:七十、小树成林,聚沙成塔:随机森林与大模型的协同进化
随机森林是一种基于决策树的集成学习算法,通过构建多棵决策树并结合它们的预测结果来提高准确性和稳定性。其核心思想包括两个随机性:Bootstrap采样(每棵树使用不同的训练子集)和特征随机选择(每棵树分裂时只考虑部分特征)。这种方法能有效处理大规模高维数据,避免过拟合,并评估特征重要性。随机森林的超参数如树的数量、最大深度等可通过网格搜索优化。该算法兼具强大预测能力和工程化优势,是机器学习中的常用基础模型。
350 164
|
7天前
|
机器学习/深度学习 自然语言处理 机器人
阿里云百炼大模型赋能|打造企业级电话智能体与智能呼叫中心完整方案
畅信达基于阿里云百炼大模型推出MVB2000V5智能呼叫中心方案,融合LLM与MRCP+WebSocket技术,实现语音识别率超95%、低延迟交互。通过电话智能体与座席助手协同,自动化处理80%咨询,降本增效显著,适配金融、电商、医疗等多行业场景。
359 155