person类的代码:
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import org.apache.hadoop.io.BooleanWritable;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.io.Writable;
public class Person implements Writable {
//相当于String类型
private Text name;
public Text getName() {
return name;
}
public void setName(Text name) {
this.name = name;
}
public IntWritable getAge() {
return age;
}
public void setAge(IntWritable age) {
this.age = age;
}
public BooleanWritable getMale() {
return male;
}
public void setMale(BooleanWritable male) {
this.male = male;
}
private IntWritable age;
private BooleanWritable male;
//序列化
public void write(DataOutput out) throws IOException{
name.write(out);
age.write(out);
male.write(out);
}
//反序列化
public void readFields(DataInput in) throws IOException{
name = new Text();
age=new IntWritable();
male=new BooleanWritable();
name.readFields(in);
age.readFields(in);
male.readFields(in);
}
}
测试类的代码:
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import org.apache.hadoop.io.BooleanWritable;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.junit.Test;
public class TestPerson {
@Test
public void testSeria() throws Exception{
//new person
Person p = new Person();
p.setName(new Text("tomas"));
p.setAge(new IntWritable(12));
p.setMale(new BooleanWritable(false));
//序列化
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dataOut = new DataOutputStream(baos);
p.write(dataOut);
dataOut.close();
//反序列化
Person newPerson = new Person();
newPerson.readFields(new DataInputStream(new ByteArrayInputStream(baos.toByteArray())));
System.out.println(newPerson.getName());
System.out.println(newPerson.getAge().get());
}
}
转载于:https://blog.51cto.com/chunk/1888625