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("}");

相关文章
|
8月前
|
缓存
QLExpress使用及源码分析
本文介绍基于QLExpress的规则引擎实现方案,涵盖实体构建、接口定义与脚本编写。通过@QLAlias注解映射字段别名,结合YAML配置规则表达式,实现逻辑解耦。运行时动态解析AST语法树,支持汉化变量与上下文绑定,并提供缓存与延迟执行机制,提升性能与灵活性。
165 0
QLExpress使用及源码分析
|
8月前
|
存储 关系型数据库 MySQL
微服务原理篇(XXLJOB-幂等-MySQL)
本文介绍了XXL-JOB任务调度的优势、组成结构及热点商品缓存更新任务的实现,涵盖幂等性概念与解决方案,并深入解析了MySQL存储引擎特性、索引失效场景、回表与覆盖索引原理以及SQL调优和分库分表策略。
366 0
微服务原理篇(XXLJOB-幂等-MySQL)
|
8月前
|
canal 缓存 关系型数据库
微服务原理篇(Canal-Redis)
本文介绍了ES索引同步的常见方案,重点讲解Canal+MQ数据同步机制。通过解析MySQL的binlog日志,Canal模拟slave伪装接入主库,实现增量数据捕获,并结合RabbitMQ保证消息顺序性地同步至Elasticsearch。同时探讨了缓存一致性问题,提出使用分布式锁(如Redis)控制并发写操作,避免双写不一致。还涵盖Redis持久化、集群模式、过期淘汰策略及缓存三剑客(穿透、雪崩、击穿)的解决方案,系统梳理了高并发场景下的数据同步与缓存保障技术体系。
937 0
 微服务原理篇(Canal-Redis)
|
8月前
|
人工智能 机器人 Java
黑马最新项目
AIGC项目涵盖大模型私有化部署、聊天机器人、RAG知识库及代码提示工具;天机AI集成SpringAI与多模型工作流;云岚到家聚焦微服务与分布式架构;四方保险构建统一支付与时序数据应用;星辰WMS与Dify项目即将发布。
442 0
黑马最新项目
|
8月前
|
Arthas 存储 运维
记Arthas实现一次CPU排查与代码热更新
本文介绍使用Arthas排查Java应用CPU占用过高问题的完整流程,涵盖线程分析、阻塞定位、watch命令追踪异常、jad反编译实现热更新及火焰图分析,实现无需重启应用的高效故障排查与代码修复。
274 0
|
8月前
|
机器学习/深度学习 人工智能 自然语言处理
大模型专业名词解释手册
本手册由油炸小波设计提示词、Manus创作,系统梳理大语言模型核心概念,涵盖基础原理、训练技术、优化压缩、推理应用、评估调试及伦理安全六大模块,深入浅出解析LLM关键技术术语。
751 0
|
8月前
|
消息中间件 人工智能 NoSQL
RocketMQ:A2A协议实现多智能体优化
Apache RocketMQ推出专为AI场景设计的轻量级通信模型LiteTopic,助力多智能体高效协作。通过百万级队列支持、会话状态持久化、断点续传与动态订阅等能力,解决AI应用中长时交互、上下文管理难、资源浪费等问题。结合A2A协议与AgentScope框架,实现高可靠、低延迟的Agent-to-Agent通信,构建稳定可扩展的企业级AI系统架构。(238字)
344 0
|
8月前
|
人工智能 NoSQL 前端开发
面试真题
汇总多套AI与后端技术面试题,涵盖RAG、微服务、JVM、分布式锁、MySQL优化、大模型部署等核心技术点,深入考察候选人项目经验、系统设计能力及对AI工程化的理解。
418 0
|
8月前
|
人工智能 自然语言处理 API
全面认识MCP:大模型连接真实世界的“USB-C接口”
MCP(模型上下文协议)是Anthropic推出的开放标准,被誉为AI时代的“USB-C”。它统一了大模型与工具、数据源的连接方式,简化集成,提升安全与扩展性,推动AI智能体实现复杂任务自动化,正重塑全球AI应用生态。
1330 0
|
8月前
|
XML 算法 安全
详解RAG五种分块策略,技术原理、优劣对比与场景选型之道
RAG通过检索与生成结合,提升大模型在企业场景的准确性与可控性。分块策略是其核心,直接影响检索效果与生成质量。本文系统解析五种主流分块方法:固定大小、语义、递归、基于结构及LLM分块,对比其优缺点与适用场景,并提出组合优化建议,助力构建高效、可信的RAG系统。
354 0