java jute_ZooKeeper源码阅读(六):JUTE | 学步园
JUTE是跨语言序列化/反序列化工具,类似Thrift
用于产生java/c版本的消息类
比如:
zkDataBase.addCommittedProposal:
QuorumPacket pp = newQuorumPacket(Leader.PROPOSAL, request.zxid,
baos.toByteArray(), null);
Proposal p = newProposal();
p.packet = pp;
p.request = request;
这里就用到了jute生成的java版QuorumPacket。
rcc.jj --javacc--> org.apache.jute.compiler
zookeeper.jute --org.apache.jute.compiler.generated.RCC--> java/c的消息类实现
//JUTE由javacc编译src\java\main\org\apache\jute\compiler\generated\rcc.jj产生
Jute is a partial implementation ofHadoop'srecord
serialization format.
//javacc : a lexer andparser generator for LL(k) grammars
//org.apache.jute.compiler 包含C、C++、C#、java的生成器
//Generate record code in given language. Language should be alllowercase.
public voidgenCode(String language, File outputDirectory)
//org.apache.jute.compiler
CppGenerator andJavaGenerator are the main entry points from the parser.
//入口在JFile.genCode
JFile又在rcc.jj中被引用
generate_jute_parser:
创建${build.dir}/jute_compiler/org/apache/jute/compiler/generated目录
target="${java.src.dir}${jute_javacc.packagedir}/rcc.jj"
outputdirectory="${jute_javacc.dir}${jute_javacc.packagedir}/"
javacchome="${ivy.lib}"
/>
javacc rcc.jj
javacc编译.jj语法文件,生成一个工具Rcc。Rcc调用JFile的genCode
compile_jute:
dir="${src_generated.dir}">
dir="${csrc_generated.dir}">
生成:实体类java代码。(在文件夹src/java/generated目录下)
org.apache.zookeeper.data
…
生成:对应的C代码
rcc –l C++ …
org.apache.jute包中其余的类:
OutputArchive 序列化需要实现的接口
+BinaryInputArchive
+CsvInputArchive
+XmlInputArchive
InputArchive 反序列化需要实现的接口
+BinaryInputArchive
+CsvInputArchive
+XmlInputArchive
Index 表现为反序列化map的一个迭代器
+BinaryIndex
+CsvIndex
+XmlIndex
*Index idx = startVector(...);
* while(!idx.done()) {
* .... // read element of a vector
* idx.incr();
* }
Record : 所有产生的类都必须实现的接口
public interface Record{
public voidserialize(OutputArchive archive, String tag) throws IOException;
public voiddeserialize(InputArchive archive, String tag) throws IOException;
}
RecordReader、RecordWriter是所有InputArchive/OutputArchive的工厂类
java jute_ZooKeeper源码阅读(六):JUTE | 学步园相关推荐
- java jute_ZooKeeper源码阅读(六):JUTE
[ZooKeeper中的Leader选举也不是Paxos, 实现相关的类包括FastLeaderElection, LeaderElection.FastLeaderElection: Leader选 ...
- mybatis源码阅读(六) ---StatementHandler了解一下
转载自 mybatis源码阅读(六) ---StatementHandler了解一下 StatementHandler类结构图与接口设计 BaseStatementHandler:一个抽象类,只是实 ...
- java经典源码 阅读_公开!阿里甩出“源码阅读指南”,原来源码才是最经典的学习范例...
我们为啥要阅读源码? 为什么面试要问源码?为什么我们Java程序员要去看源码?相信大多数程序员看到源码第一感觉都是:枯燥无味,费力不讨好!要不是为了"涨薪"我才不去看这个鬼东西!但 ...
- Java String源码阅读
String的源码阅读 主要依赖于ArrayList.Arrays.Comparator.StringJoiner和nio包的Charset类. Java程序中所有的字符串字面量都是由该类的实例来实现 ...
- mysql 1260,MYSQL 源码阅读 六
前期节要 MYSQL源码阅读 一 MYSQL源码阅读 二 MYSQL源码阅读 三 MYSQL 源码阅读 四 MYSQL 源码阅读 五 上次有两个问题没搞明白 1 是 为什么一定要开启调试线程 ? 因为 ...
- Struts2源码阅读(六)_ActionProxyActionInvocation
下面开始讲一下主菜ActionProxy了.在这之前最好先去了解一下动态Proxy的基本知识. ActionProxy是Action的一个代理类,也就是说Action的调用是通过ActionProxy ...
- java jute_ZooKeeper源码分析-Jute-第一部分
Hadoop record I/O 包含class文件以及record描述语言解释器用于简化records的序列化和反序列化. 介绍 任何显著复杂性的软件系统都需要与外界进行数据交换的机制.数据交互通 ...
- 走过的路-java源码阅读之路
源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心. 一.人生三种境界: 1.昨夜西风凋碧树,独上高楼望尽天涯路. 2.衣带渐宽终不悔,为伊消得人憔悴. ...
- Java源码阅读的真实体会(一种学习思路)
刚才在论坛不经意间,看到有关源码阅读的 帖子 .回想自己前几年,阅读源码那种兴奋和成就感( 1 ),不禁又有一种激动. 源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心. 说到技术基础,我 ...
最新文章
- Github使用初体验2018.08.07
- C/C++ mysql 设置字符集
- 承接数字油画图稿/线条图定制(出图)业务
- 移动通信—无线波传播
- 关于函数指针调用C++非静态成员
- iservice封装有哪些方法_总结WebService的一些封装技巧
- Swift中文教程(五)控制流
- 95-136-043-源码-Operator-CoProcessOperator
- Headless CMS 的内部
- 可微偏导数一定存在_【数学】多元函数可微如何判断?
- python实现图灵机器人帮你回复微信好友消息
- 一图理解ceil和floor的区别
- 帆软报表决策系统自定义登录界面 使用验证码登录 教程一
- 第18集丨不立志,天下无可成之事
- AIMD吞吐量公式的推导
- 电脑电源问题,导致攒机电脑无法开机
- 查找共家庭组计算机,家庭组多台电脑共享方法
- 美团java面试_2020年美团Java一面,美团面经面试流程面试题整理
- 学校标准化计算机室的设备配置,幸福小学创建标准化学校汇报材料
- Edwards推出市场上抽吸速度最高的新款紧凑型干式真空泵