Writable接口
package cn.chen.hd.mr;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Writable;
import java.io.*;
public class TestWritable {
public static void main(String[] args) throws IOException {
IntWritable writable = new IntWritable();
writable.set(1232131);
byte[] bytes = serialize(writable);
for(int i = 0;i < bytes.length;i ++){
System.out.println(bytes[i]);
}
IntWritable writable1 = new IntWritable();
deserialize(writable1, bytes);
System.out.println(writable1.get());
}
public static byte[] serialize(Writable writable) throws IOException {
ByteArrayOutputStream out = new ByteArrayOutputStream();
DataOutputStream dataout = new DataOutputStream(out);
writable.write(dataout);
dataout.close();
return out.toByteArray();
}
public static byte[] deserialize(Writable writable,byte[] bytes) throws IOException {
ByteArrayInputStream in = new ByteArrayInputStream(bytes);
DataInputStream dataIn = new DataInputStream(in);
writable.readFields(dataIn);
dataIn.close();
return bytes;
}
}
自定义Writable
package cn.chen.hd.mr;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.io.WritableComparable;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
public class TextPair implements WritableComparable<TextPair>{
private Text first;
private Text second;
public TextPair(){
set(new Text(),new Text());
}
public TextPair(String first,String second){
set(new Text(first),new Text(second));
}
public TextPair(Text first,Text second){
set(first,second);
}
public Text getFirst() {
return first;
}
public Text getSecond() {
return second;
}
public void set(Text first, Text second){
this.first = first;
this.second = second;
}
@Override
public int compareTo(TextPair o) {
return 0;
}
@Override
public boolean equals(Object o) {
if(o instanceof TextPair){
TextPair tp = (TextPair) o;
return first.equals(((TextPair) o).first) && second.equals(tp.second);
}
return false;
}
@Override
public int hashCode() {
return first.hashCode() * 163 + second.hashCode();
}
@Override
public void write(DataOutput out) throws IOException {
first.write(out);
second.write(out);
}
@Override
public void readFields(DataInput in) throws IOException {
first.readFields(in);
second.readFields(in);
}
}