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

相关文章
|
2月前
|
人工智能 机器人 Java
黑马最新项目
AIGC项目涵盖大模型私有化部署、聊天机器人、RAG知识库及代码提示工具;天机AI集成SpringAI与多模型工作流;云岚到家聚焦微服务与分布式架构;四方保险构建统一支付与时序数据应用;星辰WMS与Dify项目即将发布。
109 0
黑马最新项目
|
2月前
|
canal 缓存 关系型数据库
微服务原理篇(Canal-Redis)
本文介绍了ES索引同步的常见方案,重点讲解Canal+MQ数据同步机制。通过解析MySQL的binlog日志,Canal模拟slave伪装接入主库,实现增量数据捕获,并结合RabbitMQ保证消息顺序性地同步至Elasticsearch。同时探讨了缓存一致性问题,提出使用分布式锁(如Redis)控制并发写操作,避免双写不一致。还涵盖Redis持久化、集群模式、过期淘汰策略及缓存三剑客(穿透、雪崩、击穿)的解决方案,系统梳理了高并发场景下的数据同步与缓存保障技术体系。
88 0
 微服务原理篇(Canal-Redis)
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
大模型专业名词解释手册
本手册由油炸小波设计提示词、Manus创作,系统梳理大语言模型核心概念,涵盖基础原理、训练技术、优化压缩、推理应用、评估调试及伦理安全六大模块,深入浅出解析LLM关键技术术语。
292 0
|
2月前
|
Arthas 存储 运维
记Arthas实现一次CPU排查与代码热更新
本文介绍使用Arthas排查Java应用CPU占用过高问题的完整流程,涵盖线程分析、阻塞定位、watch命令追踪异常、jad反编译实现热更新及火焰图分析,实现无需重启应用的高效故障排查与代码修复。
91 0
|
2月前
|
存储 关系型数据库 MySQL
微服务原理篇(XXLJOB-幂等-MySQL)
本文介绍了XXL-JOB任务调度的优势、组成结构及热点商品缓存更新任务的实现,涵盖幂等性概念与解决方案,并深入解析了MySQL存储引擎特性、索引失效场景、回表与覆盖索引原理以及SQL调优和分库分表策略。
53 0
微服务原理篇(XXLJOB-幂等-MySQL)
|
2月前
|
消息中间件 Java 数据安全/隐私保护
异步消息组件MQ基础
本课程学习RabbitMQ在微服务中的应用,涵盖MQ的应用场景、异步与同步调用区别、RabbitMQ的安装与配置、消息收发入门、工作队列模型及交换机类型(Fanout、Direct、Topic)等核心知识,并结合SpringAMQP实现消息通信与项目实战。
52 0
异步消息组件MQ基础
|
2月前
|
负载均衡 Java 应用服务中间件
微服务网关与配置中心 学习目标
本课程学习Spring Cloud Gateway网关的实现,掌握路由配置、负载均衡、内置过滤器(如StripPrefix)及全局过滤器的使用。重点包括自定义身份校验过滤器、JWT鉴权流程、微服务间用户信息传递,并结合Nacos实现服务发现与统一配置管理,完成前后端联调与权限控制。
67 0
微服务网关与配置中心 学习目标
|
2月前
|
Java 应用服务中间件 Sentinel
服务保护、分布式事务
本课程讲解微服务保护核心知识,涵盖雪崩问题、熔断降级、限流隔离等方案,学习Sentinel实现熔断限流,掌握FallbackFactory降级处理及Seata分布式事务原理与应用。
35 0
服务保护、分布式事务
|
2月前
|
人工智能 NoSQL 前端开发
面试真题
汇总多套AI与后端技术面试题,涵盖RAG、微服务、JVM、分布式锁、MySQL优化、大模型部署等核心技术点,深入考察候选人项目经验、系统设计能力及对AI工程化的理解。
129 0
|
2月前
|
安全 Java 网络安全
HTTP工具
本文介绍了Java中通过HttpClient发送HTTP/HTTPS的GET和POST请求,并在请求头中添加AppKey和Secret的方法,包含设置超时参数、SSL安全连接及资源释放的完整实现,适用于安全通信场景。
80 0