2016-07-11 30 views
-2

可能因为执行Writable会给我们带来一个可序列化的对象。我知道DataInputDataOutput直接处理字节流,但我认为直接读取它们的值并将其存储在基元类型中也没有什么坏处。为什么在我们可以直接使用DataInput和DataOutput时使用Writable?

也就是说,使用readFields()write()方法似乎是徒劳的,只能用于模块化的角度。为实例变量创建DataInputDataOutput类的对象并直接进行输入(使用DataInputDataOutput就像扫描器实用程序类)似乎很简单。为他们创建一个接口并实现这些显而易见的方法(无论是在预定义的盒子类还是我们自己定制的类中)看起来都像语法糖,就我所见。

帮助我看穿它,如果有什么可见的。

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

+0

'Writable'不会产生可序列化的对象,也不会产生'DataInput'或'DataOutput'。不清楚你在说什么,更不用说你在问什么。 – EJP

+0

[可写的原因是什么](http://stackoverflow.com/q/17203661/207421)可能存在重复。 – EJP

+0

@EJP他们都是。 [Here](https://acadgild.com/blog/writable-and-writablecomparable-in-hadoop/)和[here](https://www.google.co.in/url?sa=t&rct=j&q= &ESRC = S&源=幅和CD = 1&CAD = RJA&uact = 8&VED = 0ahUKEwiRs4aNkuvNAhUJPxoKHTWgDCEQFggdMAA&URL = HTTPS%3A%2F%2Fhadoop.apache.org%2Fdocs%2Fr2.6.1%2Fapi%2Forg%2Fapache%2Fhadoop%2Fio%2FWritable.html&USG = AFQjCNEz5Mh9TeOMqXd8AX74QxlfFMzCzw&SIG2 = 35nxbPRITVf6lfzivGUSjw) 。 而你的第二个评论的问题是谈论别的东西。不要只读标题! –

回答

0

DataOutputDataInput序列化/ deserialze只是最基本的类型,即,原始类型而不是定制或复杂的对象。

这就是为什么通过实施Writable,反过来它的方法readFields(DataInput in)write(DataOutput out),我们可以序列化自己的类成员/实例变量并遍历其输入或输出。由于Writables是为特定类编写的,因此它们是紧凑的,小型的(and not 5-bytes long),因此提供更高的性能,因为我们不必为类类型存储metdata,并且与Java Serializable相比,可以轻松通过分布式网络进行流式传输。

相关问题