writable解读.docx

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
writable解读writable解读

[Hadoop源码解读](五)MapReduce篇之Writable相关类 分类:Hadoop源码解读 2012-08-26 12:12 870人阅读评论(1) 收藏举报? 昨天出去玩了,今天继续。? 前面讲了InputFormat,就顺便讲一下Writable的东西吧,本来应当是放在HDFS中的。? 当要在进程间传递对象或持久化对象的时候,就需要序列化对象成字节流,反之当要将接收到或从磁盘读取的字节流转换为对象,就要进行反序列化。Writable是Hadoop的序列化格式,Hadoop定义了这样一个Writable接口。[html]view plaincopyprint?public?interface?Writable?{????void?write(DataOutput?out)?throws?IOException;????void?readFields(DataInput?in)?throws?IOException;??}??public interface Writable { void write(DataOutput out) throws IOException; void readFields(DataInput in) throws IOException;}一个类要支持可序列化只需实现这个接口即可。下面是Writable类得层次结构,借用了Hadoop:The Definitive Guide的图。? ? ?下面我们一点一点来看,先是IntWritable和LongWritable。? ? ? ? ??WritableComparable接口扩展了Writable和Comparable接口,以支持比较。正如层次图中看到,IntWritable、LongWritable、ByteWritable等基本类型都实现了这个接口。IntWritable和LongWritable的readFields()都直接从实现了DataInput接口的输入流中读取二进制数据并分别重构成int型和long型,而write()则直接将int型数据和long型数据直接转换成二进制流。IntWritable和LongWritable都含有相应的Comparator内部类,这是用来支持对在不反序列化为对象的情况下对数据流中的数据单位进行直接的,这是一个优化,因为无需创建对象。看下面IntWritable的代码片段:[html]view plaincopyprint?public?class?IntWritable?implements?WritableComparable?{????private?int?value;???????//……?other?methods????public?static?class?Comparator?extends?WritableComparator?{??????public?Comparator()?{????????super(IntWritable.class);??????}????????public?int?compare(byte[]?b1,?int?s1,?int?l1,?????????????????????????byte[]?b2,?int?s2,?int?l2)?{????????int?thisValue?=?readInt(b1,?s1);????????int?thatValue?=?readInt(b2,?s2);????????return?(thisValuethatValue???-1?:?(thisValue==thatValue???0?:?1));??????}????}??????static?{????????????????????????????????????????//?register?this?comparator??????WritableComparator.define(IntWritable.class,?new?Comparator());????}??}??public class IntWritable implements WritableComparable { private int value; //…… other methods public static class Comparator extends WritableComparator { public Comparator() { super(IntWritable.class); } public int compare(byte[] b1, int s1, int l1,

文档评论(0)

cxiongxchunj + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档