我创建了一个VectorWritable类,它实现了Writable接口。我试图将VectorWritable对象写入输出文件,但我得到了这个:VectorWritable @ 1355b88b。这是我的写法:
public void write(DataOutput out) throws IOException {
getVectorString().write(out);
}
函数getVectorString()给出了一个Text对象。
答案 0 :(得分:1)
我没有50位代表发表评论,因此我会将其作为答案撰写。
如何在getVectorString()中创建此Text对象?您是否在VectorWritable对象上调用默认的toString()方法,该对象返回的字符串类似于" VectorWritable @ 1355b88b"除非你覆盖它以返回一个更有用的字符串来描述你的对象吗?
编辑:
根据您的评论Text vectorString
是VectorWritable
类的成员,您可以在Text
方法中设置此set
对象,因此我猜set
方法也在VectorWritable
内,它不是静态方法,为什么要将VectorWritable
对象传递给它?看起来您可以在一个set
对象上调用此VectorWritable
方法,将另一个方法传递给它,并使vectorString
与周围的VectorWritable
对象不匹配。
如何将VectorWritable
写入输出?您是否调用了在问题中发布的write
方法?因为此输出VectorWritable@1355b88b
看起来像是将VectorWritable
作为参数传递给调用其默认toString()
方法的方法,该方法将返回类似VectorWritable@1355b88b
的字符串。
可写接口用于序列化对象。因此,您可以将对象写入输出,并将其读回,但是使用您的实现,很难解析您创建的字符串并将对象读回。 Example of implementation
public void write(DataOutput out) throws IOException {
out.writeInt(counter);
out.writeLong(timestamp);
}
public void readFields(DataInput in) throws IOException {
counter = in.readInt();
timestamp = in.readLong();
}