Writable接口

2023-05-16

在org.apache.hadoop.io中,hadoop使用自己的序列化格式Writables接口,具有紧凑,快速的特点,不过目前只有用Java才能较容易扩展。在hadoop中,它一般用于MapReduce程序的序列化 键值对 。它是基于java.io 中的数据输入输出流DataInput和DataOutput的。
void readFields(DataInput in)   //从in流反序列化出内容(在hadoop中,为了高效率,会尽可能优先找到储存中已存在的对象将它取出复用)。


void write(DataOutput out)//把内容序列化到out流


下面就给出hadoop官方文档中推荐的例子:
       public class MyWritable implements Writable {    //自己定义一个类实现Writable接口,定义两个私有成员变量
       // Some data     
       private int counter;
       private long timestamp;
       
      //覆写write方法,该方法使用out参数对象把counter和timestamp写到out中(也就是序列化的过程)。
       public void write(DataOutput out) throws IOException {        
         out.writeInt(counter);
         out.writeLong(timestamp);
       }
       
        //覆写readFields方法,该方法用in参数对象把数据读取到counter和timestamp中(也就是反序列化的过程)。
       public void readFields(DataInput in) throws IOException {     
         counter = in.readInt();
         timestamp = in.readLong();
       }
       
      //设定一个静态方法,使用此方法可以返回一个Writable对象实例
       public static MyWritable read(DataInput in) throws IOException {
         MyWritable w = new MyWritable();
         w.readFields(in);
         return w;
       }

     }



让我们再来看一个常用的类IntWritable,它是java对int对象的一个封装,我们可以这样使用构造函数实例化对象。
        IntWritable writable = new IntWritable(163);
        我们使用内存操作流ByteArrayOutputStream和数据操作流DataOutputStream来查看这个writable中的序列化形式:
      static byte [] serialize(Writable writable){
       ByteArrayOutputStream out = new ByteArrayOutputStream();
      DataOutputStream dataOut = new DataOutputStream(out);
      writable.write(dataOut);
      dataOut.close();
      return out.toByteArray();
        }
      byte[] bytes = serialize(writable);
     再用Junit4断言,得到它的序列化形式为00000a3





本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Writable接口 的相关文章

  • 【深度学习】时间注意力模块与空间注意力模块

    注意力模块 通道 xff08 时间 xff09 注意力模块空间注意力模块 通道 xff08 时间 xff09 注意力模块 为了汇总空间特征 xff0c 作者采用了全局平均池化和最大池化两种方式来分别利用不同的信息 输入是一个 H W C 的
  • 【机器学习】机器学习与统计分布的关系

    这里写目录标题 1 常见的统计学分布1 xff09 离散分布a 伯努利分布b 二项分布c 泊松分布 2 xff09 连续分布a 正态分布 xff08 高斯分布 xff09 b 均匀分布 为什么我们喜欢用 sigmoid 这类 S 型非线性变
  • AKKA入门

    1 Guardian java package com example demo import akka actor typed javadsl ActorContext import akka actor typed ActorRef i
  • 【深度学习】深入理解Batch Normalization批标准化

    Batch Normalization 1 Internal Covariate Shift 问题2 BatchNorm的本质思想1 xff09 函数图像说明2 xff09 算法3 xff09 引入参数恢复表达能力4 xff09 公式 3
  • Autolabelimg自动标注工具

    目录 前言 一 工具原理和功能 1 原理 2 功能列表 二 实战 1 下载与安装 2 配置环境 3 开始使用 4 导入模型 5 选择标注类别 6 进行自动标注 三 总结 前言 在做机器视觉有监督方面 通常会面对很多数据集 xff0c 然后去
  • anchor base,anchor free和基于分割的图像检测

    目录 1 anchor base 2 anchor free 3 基于分割 reference 1 anchor base 什么是anchor based的目标检测方法呢 如果要让你定一个规则去一个图片上框一个物体 xff0c 你会怎么做呢
  • 我的2013:从北京到石家庄的软件开发历程

    记得是正月初八那天早上离开了老家 xff0c 坐上了开往北京的大巴车去北京准备新 的一年的奋斗 xff0c 车票120元了 涨价了20 xff0c 而且还没有地方报销去了 gt lt 因为年底的时候已经离职了 考虑到各公司部门人员 xff0
  • [机器学习] ML重要概念:梯度(Gradient)与梯度下降法(Gradient Descent)

    引言 机器学习栏目记录我在学习Machine Learning过程的一些心得笔记 xff0c 涵盖线性回归 逻辑回归 Softmax回归 神经网络和SVM等等 xff0c 主要学习资料来自网上的免费课程和一些经典书籍 xff0c 免费课程例
  • TPMS胎压芯片选择:英飞凌SP370、英飞凌SP40、飞思卡尔FXTH87

    简介TPMS Tire Pressure Monitoring System xff08 TPMS xff09 xff0c 轮胎压力监测系统 xff0c TPMS的作用是在汽车行驶过程中对轮胎气压进行实时自动监测 xff0c 并对轮胎漏气和
  • 2014年计算机求职总结--准备篇

    版权所有 xff0c 转载请注明出处 xff0c 谢谢 xff01 http blog csdn net walkinginthewind article details 13000431 找工作是一个长期准备的过程 xff0c 突击是没什
  • Code::Blocks之设置字体

    设置 S gt 编辑器 D gt 常规设置 gt 编辑器设置 xff1b 在 34 字体 34 中选择 34 选择 34 按钮 xff0c 进行字体 字形 大小的选择 xff1b 确定
  • 嵌入式软件面试问题总结

    1 DCS 答 xff1a DCS一般指分散控制系统 分散控制系统是以微处理器为基础 xff0c 采用控制功能分散 显示操作集中 兼顾分而自治和综合协调的设计原则的新一代仪表控制系统 集散控制系统简称DCS 也可直译为 分散控制系统 或 分
  • 通过字体名获取字体文件

    由于在GLFT FreeType中需要传入字体文件作为参数 xff0c 所以需要通过字体名来寻找字体文件 现已完成 xff0c 特此总结分享 参考链接 xff1a https www codeproject com Articles 123

随机推荐