1)底层通信数据封装与操作

         

BinaryInputArchive& BinaryOutputArchive底层通信数据封装与操作

    BinaryInputArchive是对于DataInput的封装,用于处理基于zookeeper协议的底层数据,其实是从DataInputStream输入中读取数据。

BinaryOutputArchive是对于DataOutput的封装,根据zookeeper协议将数据写入到DataOutputStream中去。

  

1.  读取int, boolean基本数据类型直接代理给DataInput执行

 

写入int, boolean基本数据类型直接代理给DataOutput执行

2.   读取String和Buffer是,BinaryInputArchive根据Zookeeper协议做了处理

1) 读取四个字节int值表示读取数据内容的大小

2) 根据数据大小构建一个byte数组

3) 将DataInput的数据读取到字节数组中


写入String和Buffer是,BinaryOutputArchive根据Zookeeper协议做了处理

1) 写入四个字节int值表示写入数据内容的大小, 如果写入数据为null,值为-1


2)将数据转为字节数组,写入DataOutput中

3. 读取复杂的数据对象,Zookeeper底层传输的对象都需要实现Record接口,readRecord方法,会代理给Record进行反序列化

写入复杂的数据对象,Zookeeper底层传输的对象都需要实现Record接口writeRecord方法,会代理给Record进行序列化

4.   对于Record对象中持有集合对象(当然能够序列化与反序列化,集合中的元素必须也实现Record):

BinaryInputArchive提供startVector

1)  读取四个字节的int数,表示集合的大小

2)  构建一个BinaryIndex对象返回

BinaryOutputArchive提供startVector

向DataOutput数据流中写入集合大小,如果为null值为-1

5.  BinaryInputArchive对象的内部类BinaryIndex作用,主要是用来计数集合对象的反序列话的

Record是zookeepr底层通信数据序列化与反序列化统一接口,

2)Record接口

Record是zookeepr底层通信数据序列化与反序列化统一接口

1. 继承结构

子类以Request结尾的是Client向Server发起请求

子类以Response结尾的是Server向Client发起响应

子类以Txn结尾是Server向Server发起事务请求的

子类以Packet结尾是…???

其他如Id, ACL往往被其他对象持有,不会单独在网络传输

2. 举例

1)CreateRequest: 用于在客户端创建一个节点时向服务器端发送的请求

序列化CreateRequest,

archive对象是对DataOutput封装,顺序的将数据写入到DataOutputStream输出流中去

反序列化CreateRequest,

archive对象是对DataInput封装,顺序的从DataInputStream输入流中中读取数据

      

zookeeper原理解析-序列化的更多相关文章

  1. zookeeper原理解析-数据存储

    Zookeeper内存结构 Zookeeper是怎么存储数据的,什么机制保证集群中数据是一致性,在网络异常,当机以及停电等异常情况下恢复数据的,我们知道数据库给我们提供了这些功能,其实zookeepe ...

  2. zookeeper原理解析-客户端与服务器端交互

    Zookeeper集群中server数量总是确定的,所以集群中的server交互采用比较可靠的bio长连接模型:不同于集群中sever间交互zookeeper客户端其实数量是未知的,为了提高zooke ...

  3. zookeeper原理解析-选举

    1)QuorumPeerMain加载 Zookeeper集群启动的入口类是QuorumPeerMain来加载配置启动QuorumPeer线程.首先我们来看下QuorumPeer, 谷歌翻译quorum ...

  4. zookeeper原理解析-服务器端处理流程

    1)处理器链 这部分内容我们主要讲解zookeeper请求在zookeeper server端的处理流程,对于不同角色的zookeeper具有不同的处理流程, ZookeepeerServer的sta ...

  5. ZooKeeper学习之路 (八)ZooKeeper原理解析

    ZooKeeper中的各种角色 ZooKeeper与客户端 每个Server在工作过程中有三种状态: LOOKING:当前Server不知道leader是谁,正在搜寻 LEADING:当前Server ...

  6. 1.zookeeper原理解析-数据存储之Zookeeper内存结构

    Zookeeper是怎么存储数据的,什么机制保证集群中数据是一致性,在网络异常,当机以及停电等异常情况下恢复数据的,我们知道数据库给我们提供了这些功能,其实zookeeper也实现了类似数据库的功能. ...

  7. ZooKeeper原理解析

    目录 ZooKeeper中的各种角色 ZooKeeper与客户端 Zookeeper节点数据操作流程 Paxos 算法概述(ZAB 协议) ZooKeeper 的选主机制 选择机制中的概念 选举消息内 ...

  8. Zookeeper(三) Zookeeper原理与应用

    一.zookeeper原理解析 1.进群角色描述 2.Paxos 算法概述( ZAB 协议)    分布式一致性算法 3.Zookeeper 的选主(恢复模式) 以一个简单的例子来说明整个选举的过程. ...

  9. RPC原理解析

    1.RPC原理解析 1.1 什么是RPC RPC(Remote Procedure Call Protocol) --远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络 ...

随机推荐

  1. ADT - Eclipse 常用快捷键

    ADT - Eclipse 常用快捷键 Alt + / : 自动补全 F3 : 打开类的源码 Ctrl + D : 删除选中行 Ctrl + 1 : 自动弹出修改建议 Ctrl + Shift + J ...

  2. [转]ThoughtWorks(中国)程序员读书雷达

    http://agiledon.github.io/blog/2013/04/17/thoughtworks-developer-reading-radar/#rd?sukey=f64bfa68330 ...

  3. 旅游公司招聘Java工程师

    公司招聘:岗位要求如下 Java开发工程师工作内容1.根据需求完成软件系统代码的开发,测试以及文档撰写工作:2.分析并解决客户的问题:3.配合业务部门进行数据分析以及系统优化 岗位要求:1.本科以上学 ...

  4. mysql select日期格式

    mysql表中datatime类型存储为2016-01-10,C#直接select 后,在datatable里面看,变成01/10/2016,需要还原回去,使用select DATE_FORMAT(列 ...

  5. ThinkPHP实现定时任务

    项目服务端框架我选用的是ThinkPHP,由于策划案中有需求要定时刷新指定数据,所以在windows平台我使用微软的计划任务调用bat脚本来执行下面的命令来完成 php index.php /Home ...

  6. Java Web中的中文编码

    Java Web开发中经常会遇到中文编码问题,那么为什么需要编码呢?因为人类需要表示的符号太多,无法用1个字节来表示,而计算机中存储信息最小单元为1个字节.所以必须指定char与byte之间的编码规则 ...

  7. JS 阶段练习~ 仿flash的图片轮换效果

    结合了所学的简单运动框架~  做这样一个综合小实例~~ -------------------------主要问题: 1.getByClassName  IE低版的兼容性 2.DOM不够严谨 … 各种 ...

  8. 使用iTerm2快捷连接SSH

    iTerm2和Mac自带的Terminal差不多,但是功能更强大,无论透明度.字体.配色.分屏等都可以设置,除了这些花哨的功能外,最近新学了一招,就是可以通过Profiles的设置打开就执行写好的脚本 ...

  9. 【MySQL】花10分钟阅读下MySQL数据库优化总结

    1.花10分钟阅读下MySQL数据库优化总结http://www.kuqin.com2.扩展阅读:数据库三范式http://www.cnblogs.com3.my.ini--->C:\Progr ...

  10. C#中两个Form窗口之间的传值(父->子)(子->父)

    //首先定义两个Form,一个为Form1,一个为Form2,其中Form1作为父窗口,Form2作为子窗口 //1.父窗口传值给子窗口 //Form1中代码: public Form1() { In ...