序列化

简介: 1

一、前言
  在完成了前面的理论学习后,现在可以从源码角度来解析Zookeeper的细节,首先笔者想从序列化入手,因为在网络通信、数据存储中都用到了序列化,下面开始分析。
二、序列化
  序列化主要在zookeeper.jute包中,其中涉及的主要接口如下
    · InputArchive
    · OutputArchive
    · Index
    · Record
2.1 InputArchive
  其是所有反序列化器都需要实现的接口,其方法如下 
InputArchive的类结构如下   

  1. BinaryInputArchive 
  2. CsvInputArchive 
  3. XmlInputArchive
    Java
    运行代码
    复制代码
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    /**

     }
     return Float.parseFloat(v.getValue());
    

    }

    // 读取double类型
    public double readDouble(String tag) throws IOException {

     Value v = next();
     if (!"double".equals(v.getType())) {
         throw new IOException("Error deserializing "+tag+".");
     }
     return Double.parseDouble(v.getValue());
    

    }

    // 读取String类型
    public String readString(String tag) throws IOException {

     Value v = next();
     if (!"string".equals(v.getType())) {
         throw new IOException("Error deserializing "+tag+".");
     }
     return Utils.fromXMLString(v.getValue());
    

    }

    // 读取Buffer类型
    public byte[] readBuffer(String tag) throws IOException {

     Value v = next();
     if (!"string".equals(v.getType())) {
         throw new IOException("Error deserializing "+tag+".");
     }
     return Utils.fromXMLBuffer(v.getValue());
    

    }

    // 读取Record类型
    public void readRecord(Record r, String tag) throws IOException {

     r.deserialize(this, tag);
    

    }

    // 开始读取Record
    public void startRecord(String tag) throws IOException {

     Value v = next();
     if (!"struct".equals(v.getType())) {
         throw new IOException("Error deserializing "+tag+".");
     }
    

    }

    // 结束读取Record
    public void endRecord(String tag) throws IOException {

     Value v = next();
     if (!"/struct".equals(v.getType())) {
         throw new IOException("Error deserializing "+tag+".");
     }
    

    }

    // 开始读取vector
    public Index startVector(String tag) throws IOException {

     Value v = next();
     if (!"array".equals(v.getType())) {
         throw new IOException("Error deserializing "+tag+".");
     }
     return new XmlIndex();
    

    }

    // 结束读取vector
    public void endVector(String tag) throws IOException {}

    // 开始读取Map
    public Index startMap(String tag) throws IOException {

     return startVector(tag);
    

    }

    // 停止读取Map
    public void endMap(String tag) throws IOException { endVector(tag); }

}

相关文章
|
1天前
|
Java 测试技术 调度
小结
本文介绍XXL-JOB任务调度框架的使用,包括其核心组成、任务编写与配置方法。通过@XxlJob注解定义任务,结合Cron表达式实现定时调度,并支持BEAN和GLUE两种模式。重点讲解分片广播任务,利用分片参数实现分布式环境下任务的高效并行处理,提升系统性能与扩展性。
|
1天前
|
消息中间件 监控 Java
RocketMQ:底层Netty频繁OS OOM
本文记录了一例Java应用因多ClassLoader加载多个Netty的PooledByteBufAllocator导致堆外内存超限、触发OS OOM的排查过程。通过NMT、Arthas等工具分析,发现7个不同类加载器各自实例化独立的分配器,均不受MaxDirectMemorySize全局限制,最终总堆外内存远超预期。根因在于Netty使用Unsafe直接申请内存,绕过JVM监管。短期建议调低堆内存以腾出空间,长期需中间件协同优化。
|
1天前
|
Java 调度 数据库
搭建XXL-JOB
XXL-JOB由调度中心和执行器两部分组成。调度中心负责任务调度与管理,支持动态配置、监控告警;执行器部署在微服务中,接收调度请求并执行任务。通过SpringBoot集成xxl-job-core,配置注册地址后可自动注册到调度中心,实现分布式任务调度。
|
1天前
|
缓存 Java 关系型数据库
微服务原理篇(XXLJOB-幂等-MySQL)
本课程深入讲解微服务架构下的任务调度与数据一致性方案,涵盖XXL-JOB分布式调度原理、幂等性设计、MySQL存储引擎对比、索引优化及SQL调优策略。通过实战掌握热点数据缓存预热、分片广播任务处理、避免重复执行等核心技能,提升系统性能与可靠性。(238字)
|
5天前
|
云安全 监控 安全
|
3天前
|
存储 机器学习/深度学习 人工智能
打破硬件壁垒!煎饺App:强悍AI语音工具,为何是豆包AI手机平替?
直接上干货!3000 字以上长文,细节拉满,把核心功能、使用技巧和实测结论全给大家摆明白,读完你就知道这款 “安卓机通用 AI 语音工具"——煎饺App它为何能打破硬件壁垒?它接下来,咱们就深度拆解煎饺 App—— 先给大家扒清楚它的使用逻辑,附上“操作演示”和“🚀快速上手不踩坑 : 4 条核心操作干货(必看)”,跟着走零基础也能快速上手;后续再用真实实测数据,正面硬刚煎饺 App的语音助手口令效果——创建京东「牛奶自动下单神器」口令 ,从修改口令、识别准确率到场景实用性,逐一测试不掺水,最后,再和豆包 AI 手机语音助手的普通版——豆包App对比测试下,简单地谈谈煎饺App的能力边界在哪?
|
10天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
1185 7
|
1天前
|
人工智能
自动化读取内容,不会写爆款的普通人也能产出好内容,附coze工作流
陌晨分享AI内容二创工作流,通过采集爆款文案、清洗文本、智能改写,实现高效批量生产。五步完成从选题到输出,助力内容创作者提升效率,适合多场景应用。
205 104

热门文章

最新文章