Хорошо, я нашел решение. Я не знаю, достаточно ли это эффективно, но это работает. Вот что я сделал. Это в моем определении класса:
public void write(DataOutput d) throws IOException
{
d.writeUTF(name);
d.writeUTF(attribute);
d.writeUTF(attType);
d.writeUTF(condition);
d.writeUTF(lines);
ObjectWritable left=new ObjectWritable(BinaryTreeNode.class,leftChild);
left.write(d);
ObjectWritable right=new ObjectWritable(BinaryTreeNode.class,rightChild);
right.write(d);
}
public void readFields(DataInput di) throws IOException
{
name=di.readUTF();
attribute=di.readUTF();
attType=di.readUTF();
condition=di.readUTF();
lines=di.readUTF();
leftChild=(BinaryTreeNode) ObjectWritable.readObject(di, new Configuration());
rightChild=(BinaryTreeNode) ObjectWritable.readObject(di, new Configuration());
}
И вот как я их использую:
Для записи:
BinaryTreeNode bla=new BinaryTreeNode();
//set the attributes
ObjectWritable obj=new ObjectWritable(BinaryTreeNode.class,bla);
obj.write(dos);
Для чтения:
BinaryTreeNode bla=new BinaryTreeNode();
bla= (BinaryTreeNode) ObjectWritable.readObject(in, conf);
Это отлично работает. Теперь я могу создать дерево решений и сохранить его, просто сохранив свой корень. : D