当我们可以直接使用DataInput和DataOutput时,为什么要使用Writable?

时间:2016-07-11 09:37:13

标签: java hadoop serialization java-io writable

可能是因为实现Writable会向我们提供一个可序列化的对象。我知道DataInputDataOutput直接处理字节流,但我认为直接读取它们的值并将其存储在基本类型中也没有坏处。

话虽如此,readFields()write()方法的使用似乎是徒劳的,只能在模块化的角度使用。为实例变量创建DataInputDataOutput类的对象并直接获取输入(使用DataInputDataOutput类似于扫描器实用程序类)似乎非常简单。为我们创建一个接口并实现那些明显的方法(无论是在预定义的盒子类或我们自己的自定义类中),就我所见,看起来像语法糖。

如果有什么东西要看,请帮我看看。

更新DataInputDataOutput类生成序列化对象! :○

1 个答案:

答案 0 :(得分:1)

DataOutputDataInput仅序列化/反序列化最基本的类型,即基本类型,而不是自定义或复杂对象。

这就是为什么通过实现Writable,反过来它的方法readFields(DataInput in)write(DataOutput out),我们可以序列化我们自己的类的成员/实例变量并遍历它们的输入或输出。由于Writable是针对特定类编写的,因此它们是紧凑的,小(and not 5-bytes long),因此我们不需要为类类型存储元数据,并且与{相比}允许在分布式网络上轻松进行流式传输,从而提供更高的性能。 {3}}。