从上面的可以看到继承了BinaryComparable,BinaryComparable是一个抽象类,需要我们实现下面两个方法:
/**
* Return n st bytes 0..n-1 from {#getBytes()} are valid.
*/
public abstract int getLength();
/**
* Return representative byte array for this instance.
*/
public abstract byte[] getBytes();
主要是用于获取需要读写数据的byte数组和对应的长度,从具体的compare逻辑在BinaryComparable已经实现,直接使用byte数组来比较,我们的自定义Writable只需要在write和readFields读取对应的值。这个去掉了compare过程中的反序列化操作,因为反序列化是很耗CPU的,因此性能就有了很大的提升。
最后是WritableComparator注册自定义Writable。
Hadoop中其实已经了有了一些比较通用的Writable,如BytesWritable等。