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. 华为Java编程军规,每季度代码验收标准

    引言: 这个标准是衡量代码本身的缺陷,也是衡量一个研发人员本身的价值. 军规一:[避免在程序中使用魔鬼数字,必须用有意义的常量来标识.] 军规二:[明确方法的功能,一个方法仅完成一个功能.] 军规三: ...

  2. 如何在 Evernote 中支持代码高亮

    Evernote 本身不支持代码高亮,在 Apple App-Store 上有一个建立在 Evernote 上的 EverCode,可以支持代码高亮,需要付费.虽然只有¥5,但是这个 App 似乎只能 ...

  3. JAVA编程思想(第四版)学习笔记----11.10 Map

    之前学习的是Collection层次的List接口.List层次比较简单,除去与多线程安全相关的CoppyOnWriteArrayList<T>类,这一个类在集中涉及多线程相关知识时候再学 ...

  4. 关于Oracle的疑问

    索引范围扫描(index range scan) select empno,ename from emp where empno > 1 order by empno 这种情况下不会使用索引范围 ...

  5. 64位下pwntools中dynELF函数的使用

    这几天有同学问我在64位下怎么用这个函数,于是针对同一道题写了个利用dynELF的方法 编译好的程序 http://pan.baidu.com/s/1jImF95O 源码在后面 from pwn im ...

  6. Android使用C++截屏并显示

    使用android底层自带的截屏源码进行修改后,将截取屏幕的内容再次显示在屏幕上,使屏幕呈现出暂停的效果. android自带的截屏代码在android\JB\frameworks\base\cmds ...

  7. web安全相关知识

    xss攻击入门 XSS攻击及防御 XSS的原理分析与解剖 浅谈CSRF攻击方式 利用HTTP-only Cookie缓解XSS之痛 SERVLET 2.5为COOKIE配置HTTPONLY属性 coo ...

  8. [iOS]技巧集锦:UICollectionView在旋转屏幕后Cell中的约束不起作用或自动布局失效

    这似乎是iOS的一个BUG(ref: stackoverflow的大神们讲的) 解决方案 在继承自UITableViewCell的子类中的init方法中加入如下设置: self.contentView ...

  9. 深入SpringMVC

    一.如何让一个普通类成为Controller? 方案一:实现接口Controller 解析:handleRequest(request,response) 方案二:继承AbstractControll ...

  10. 前端之ajax

    前端之ajax 本节内容 ajax介绍 原生js实现ajax jquery实现ajax json 跨域请求 1. ajax介绍 AJAX(Asynchronous Javascript And XML ...