0

我创建了一个实现接口 Writable 的类 VectorWritable。我正在尝试将 VectorWritable 对象写入输出文件,但我得到了这个:VectorWritable@1355b88b。这是我的写方法:

public void write(DataOutput out) throws IOException {  
   getVectorString().write(out);
}

函数 getVectorString() 给出一个 Text 对象。

4

1 回答 1

1

我没有 50 个代表发表评论,所以我会写它作为答案。

如何在 getVectorString() 中创建这个 Text 对象?你不是在 VectorWritable 对象上调用默认的 toString() 方法,它返回像“VectorWritable@1355b88b”这样的字符串,除非你重写它以返回一个更有用的字符串来描述你的对象?

编辑:

根据您的评论Text vectorStringVectorWritable类的成员,您在方法中设置了这个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();
   }
于 2014-05-24T16:30:46.383 回答