您的位置:首页 > 运维架构

hadoop (1.0.4) IntWritable 详解

2013-04-19 20:08 991 查看
package org.apache.hadoop.io;

import java.io.*;

/** A WritableComparable for ints. */
public class IntWritable implements WritableComparable {
private int value;                                  //对int的封装

public IntWritable() {}

public IntWritable(int value) { set(value); }

/** Set the value of this IntWritable. */
public void set(int value) { this.value = value; }

/** Return the value of this IntWritable. */
public int get() { return value; }

public void readFields(DataInput in) throws IOException {
value = in.readInt();
}

public void write(DataOutput out) throws IOException {
out.writeInt(value);
}

/** Returns true iff <code>o</code> is a IntWritable with the same value. */
public boolean equals(Object o) {
if (!(o instanceof IntWritable))
return false;
IntWritable other = (IntWritable)o;
return this.value == other.value;
}

public int hashCode() {
return value;
}

/** Compares two IntWritables. */
public int compareTo(Object o) {
int thisValue = this.value;
int thatValue = ((IntWritable)o).value;
return (thisValue<thatValue ? -1 : (thisValue==thatValue ? 0 : 1));
}

public String toString() {
return Integer.toString(value);
}

/** A Comparator optimized for IntWritable. */
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 (thisValue<thatValue ? -1 : (thisValue==thatValue ? 0 : 1));
}
}

static {                                        // register this comparator
WritableComparator.define(IntWritable.class, new Comparator());
}
}


从其代码我可以发现IntWitable类型封装了int类型,其存储方式仍为int,但其实现了int的序列化读写。其继承关系关系如下,IntWritable继承WritableComparable,而WritableComparable继承自Writable和Comparable。

同理,LongWritable,DoubleWritable,ByteWritable,BytesWritable代码类同。

而VIntWritable,没有静态Comparator函数,其他相同。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: