文档章节

zk源码阅读2:序列化

beyondflyh
 beyondflyh
发布于 2017/09/07 09:48
字数 730
阅读 4
收藏 0

摘要

本来先讲数据存储的,但是绕不开序列化,因为在网络通信、数据存储中都用到了序列化。 这一节就讲zk的序列化

简介

Zookeeper从最早的版本开始就一直使用Jute作为序列化工具,直到现在最新的版本zookeeper-3.4.9依然使用Jute;至于为什么没有换成性能更好,通用性更强的如:Apache Avro,Thrift,Protobuf等序列化组件,主要还是由于考虑到新老版本序列化组件的兼容性,另一方面Jute并没有成为Zookeeper的瓶颈所在;

序列化主要在zookeeper.jute包中, 主要是

InputArchive:反序列化器要实现的接口
OutputArchive:序列化器需要实现的接口
Index:反序列化器的迭代器
Record:用于网络传输或者本地存储的类型都实现该接口

接口介绍

InputArchive

public interface InputArchive {
    public byte readByte(String tag) throws IOException;
    public boolean readBool(String tag) throws IOException;
    public int readInt(String tag) throws IOException;
    public long readLong(String tag) throws IOException;
    public float readFloat(String tag) throws IOException;
    public double readDouble(String tag) throws IOException;
    public String readString(String tag) throws IOException;
    public byte[] readBuffer(String tag) throws IOException;
    //读取特定tag的record
    public void readRecord(Record r, String tag) throws IOException;
    //读取特定tag的record之前干的事情
    public void startRecord(String tag) throws IOException;
    //读取特定tag的record之后干的事情
    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;
}

这里除了基础类型,容器以外就是record,下面会介绍这种类型以及Index

InputArchive实现类

OutputArchive

public interface OutputArchive {
    public void writeByte(byte b, String tag) throws IOException;
    public void writeBool(boolean b, String tag) throws IOException;
    public void writeInt(int i, String tag) throws IOException;
    public void writeLong(long l, String tag) throws IOException;
    public void writeFloat(float f, String tag) throws IOException;
    public void writeDouble(double d, String tag) throws IOException;
    public void writeString(String s, String tag) throws IOException;
    public void writeBuffer(byte buf[], String tag)
        throws IOException;
    public void writeRecord(Record r, String tag) throws IOException;
    public void startRecord(Record r, String tag) throws IOException;
    public void endRecord(Record r, String tag) throws IOException;
    public void startVector(List v, String tag) throws IOException;
    public void endVector(List v, String tag) throws IOException;
    public void startMap(TreeMap v, String tag) throws IOException;
    public void endMap(TreeMap v, String tag) throws IOException;

}

这里就不加注释了,和InputArchive 相反就是了

OutputArchive 实现类

index

public interface Index {
    // 是否已经完成
    public boolean done();
    // 下一项
    public void incr();
}

index 实现类

Record

public interface Record {
    // 序列化
    public void serialize(OutputArchive archive, String tag) throws IOException;
    // 反序列化
    public void deserialize(InputArchive archive, String tag) throws IOException;
}

这个实现类就很多了

思考

对demo感兴趣的,看下面的refer就好了 jute这个序列化组件,目前就看到在zk上面用,倒是让我对protobuf这个序列化工具产生兴趣,后续专门讲序列化的时候,再研究好了

refer

http://www.cnblogs.com/leesf456/p/6278853.html jute序列化与protoBuf性能对比 http://blog.csdn.net/quhongwei_zhanqiu?viewmode=contents

© 著作权归作者所有

共有 人打赏支持
beyondflyh
粉丝 0
博文 2
码字总数 3332
作品 0
深圳
程序员
私信 提问
Zookeeper 通知更新可靠吗? 解读源码找答案!

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由特鲁门发表于云+社区专栏 导读: 遇到Keepper通知更新无法收到的问题,思考节点变更通知的可靠性,通过阅读源码解析了解到...

腾讯云加社区
10/09
0
0
使用zookeeper序列节点实现不可重入分布式锁

一、前言 在同一个jvm进程中时,可以使用JUC提供的一些锁来解决多个线程竞争同一个共享资源时候的线程安全问题,但是当多个不同机器上的不同jvm进程共同竞争同一个共享资源时候,juc包的锁就...

加多
01/12
0
0
simpleRpc解析-服务端

本文主要是对勇哥的simpleRpc进行了简单的剖析,用来学习rpc,加深对rpc的理解! 源码地址:http://git.oschina.net/huangyong/rpc 勇哥博客:https://my.oschina.net/huangyong/blog/36175...

涩谷直子
06/22
0
0
Motan源码阅读--初识Motan

Motan Motan是一套高性能,易于使用的RPC框架。提供了服务治理,包括服务节点自动发现,摘除,高可用和负载均衡。Motan具有良好扩展性,主要模块都提供了不同实现,例如多种注册中心,多种r...

春哥大魔王的博客
08/24
0
0
zookeeper数据迁移失败求解答

原创:转载请:http://my.oschina.net/u/1760714/blog/655124 通过查看从PAXOS到ZOOKEEPER分布式一致性原理与实践以及阅读相关源码,今天终于知道为什么会失败。 科普zookeeper领导者选举的过...

杭电任宇翔
2016/04/08
257
0

没有更多内容

加载失败,请刷新页面

加载更多

jquery通过id显示隐藏

var $div3 = $('#div3'); 显示 $div3.show(); 隐藏 $div3.hide();

yan_liu
今天
3
0
《乱世佳人》读书笔记及相关感悟3900字

《乱世佳人》读书笔记及相关感悟3900字: 之前一直听「荔枝」,后来不知怎的转向了「喜马拉雅」,一听就是三年。上班的时候听房产,买房了以后听装修,兴之所至时听旅行,分手后听亲密关系,...

原创小博客
今天
3
0
大数据教程(9.6)map端join实现

上一篇文章讲了mapreduce配合实现join,本节博主将讲述在map端的join实现; 一、需求 实现两个“表”的join操作,其中一个表数据量小,一个表很大,这种场景在实际中非常常见,比如“订单日志...

em_aaron
今天
3
0
cookie与session详解

session与cookie是什么? session与cookie属于一种会话控制技术.常用在身份识别,登录验证,数据传输等.举个例子,就像我们去超市买东西结账的时候,我们要拿出我们的会员卡才会获取优惠.这时...

士兵7
今天
3
0
十万个为什么之为什么大家都说dubbo

Dubbo是什么? 使用背景 dubbo为什么这么流行, 为什么大家都这么喜欢用dubbo; 通过了解分布式开发了解到, 为适应访问量暴增,业务拆分后, 子应用部署在多台服务器上,而多台服务器通过可以通过d...

尾生
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部