java jute_ZooKeeper源码阅读(六):JUTE | 学步园

java jute_ZooKeeper源码阅读(六):JUTE | 学步园JUTE 是跨语言序列化 反序列化工具 类似 Thrift 用于产生 java c 版本的消息类比如 zkDataBase addCommitted QuorumPacket newQuorumPac Leader PROPOSAL request zxid baos toByteArray null Proposalp newProposal p pac

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的工厂类

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/218988.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午11:03
下一篇 2026年3月17日 下午11:03


相关推荐

  • 2-UFT简介

    2-UFT简介UFT工具界面简介

    2022年5月8日
    162
  • vue全面介绍–全家桶、项目实例

    vue全面介绍–全家桶、项目实例简介 简单却不失优雅 小巧而不乏大匠 2016 年最火的前端框架当属 Vue js 了 很多使用过 vue 的程序员这样评价它 vue js 兼具 angular js 和 react js 的优点 并剔除了它们的缺点 授予了这么高的评价的 vue js 也是开源世界华人的骄傲 因为它的作者是位中国人 尤雨溪 EvanYou Vue js 是一个 JavaScriptMV 库 是一套构建用户界面的渐进式

    2026年3月19日
    2
  • mse均方误差怎么算_误差率怎么计算公式

    mse均方误差怎么算_误差率怎么计算公式请看下图当中的两个例子:分别求训练误差以及测试误差

    2022年9月30日
    4
  • ping云服务器失败是什么原因?

    ping云服务器失败是什么原因?ping 云服务器失败是什么原因 ping 值代表网络的响应时间 是来衡量云服务器传输速度与稳定性的标准之一 导致云服务器 ping 失败或者不稳定的原因有很多 资源过载当用户访问网站的同时 如果服务器已经有大量程序在后台运行 并且占据了大量空间 使得资源过载 那么网站的加载速度自然会慢下来 甚至可能打不开 通常我们建议将剩余资源保持在 40 左右 如果已经超过或者所剩无几 那么就需要对云服务器进行

    2026年3月17日
    2
  • jupyter和python的关系_jupyter notebook和python

    jupyter和python的关系_jupyter notebook和python这个问题参见以下文章即可,讲的很全面。核心总结Python就是原生python;anaconda类似第三方集成,方便我们管理,而且自带很多库。如果选择安装Python的话,那么还需要pipinstall一个一个安装各种库,安装起来比较痛苦,还需要考虑兼容性;PyCharm就是一个IDE的角色,和NotePad没什么本质区别。只是大家习惯上,java配合MyEclipse使用,Anaconda…

    2022年8月27日
    13
  • 如何高效实现vLLM多卡并行推理?

    如何高效实现vLLM多卡并行推理?

    2026年3月12日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号