我创建了一个实现接口 Writable 的类 VectorWritable。我正在尝试将 VectorWritable 对象写入输出文件,但我得到了这个:VectorWritable@1355b88b。这是我的写方法:
public void write(DataOutput out) throws IOException {
getVectorString().write(out);
}
函数 getVectorString() 给出一个 Text 对象。
我没有 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
.
可写接口用于序列化对象。因此,您可以将对象写入输出,然后将其读回,但是通过您的实现,很难解析您创建的字符串并读回对象。实施示例
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();
}