很多时候我们都需要实现自己的数据类型,可以通过实现Writable接口来实现自己的需要,其中只要实现两个方法即可,readFields(DataInput in) 方法和 write(DataOutput out)方法。举例如下供参考:
public class ImageVector extends Vector<Double> implements Writable
{
public double distance=0;
private static final long serialVersionUID = 1L;
public ImageVector() {
}
// 这里需要注意下自己定义的数据类型的需要传输的数据类型和内容。由于这里输出的的是一个集合,需要先读取长度,然后在读取每个元素的内容,最后是其他成员变量。
@Override
public void readFields(DataInput in) throws IOException
{
clear();
int size = in.readInt();
// System.out.println("szie"+size);
int i=0;
while(i<size)
{
this.add(in.readDouble());
i++;
}
distance=in.readDouble();
}
//这里需要和read的读取的顺序保持一致。
@Override
public void write(DataOutput out) throws IOException
{
out.writeInt(this.size());
Iterator<Double> iter=this.iterator();
while(iter.hasNext())
{
out.writeDouble(iter.next());
}
out.writeDouble(this.distance);
}
}
}