0

这是实现 Writable 的类..

public class Test implements Writable {
    List<AtomicWritable> atoms = new ArrayList<AtomicWritable>();

    public void write(DataOutput out) throws IOException {
        IntWritable size = new IntWritable(atoms.size());
        size.write(out);
        for (AtomicWritable atom : atoms)
            atom.write(out);
    }

    public void readFields(DataInput in) throws IOException {
        atoms.clear();
        IntWritable size = new IntWritable();
        size.readFields(in);
        int n = size.get();
        while(n-- > 0) {
            AtomicWritable atom = new AtomicWritable();
            atom.readFields(in);
            atoms.add(atom);
        }
    }
}

如果有人能帮助我理解如何调用 write 和 readFields 方法,我将不胜感激。基本上我无法理解在这种情况下如何构造 Test 对象。一旦对象被写入 DataOutput obj,我们如何在 DataInput 对象中恢复它。这可能听起来很傻,但我是 Hadoop 的新手,并且被分配了一个使用 Hadoop 的项目。请帮忙。

谢谢!!!

4

1 回答 1

0

基本上我无法理解Test在这种情况下如何构造对象。

是的,你没有抓住重点。如果需要构造一个实例Test并填充atoms,那么你需要添加一个构造函数到Test

public Test(ArrayList<AtomicWritable> atoms) {
     this.atoms = atoms;
}

atoms或者您需要使用默认构造函数并添加一个方法或设置器,以便您将项目添加到atoms. 后者实际上在 Hadoop 框架中很常见,具有默认构造函数和set方法。参见,例如,Text.set

不打电话readFieldswrite; 当 Hadoop 框架需要序列化和反序列化输入和输出到mapreduce.

于 2013-06-21T05:48:09.600 回答