当我们可以直接使用datainput和dataoutput时,为什么要使用writable呢?

guykilcj  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(584)

可能是因为 Writable 会给我们一个可序列化的对象。我知道 DataInput 以及 DataOutput 直接处理字节流,但我认为直接从字节流中读取值并将其存储在基元类型中没有坏处。
也就是说 readFields() 以及 write() 方法似乎是徒劳的,只能从模块化的Angular 来使用。为创建对象 DataInput 以及 DataOutput 类作为示例变量并直接获取输入(使用 DataInput 以及 DataOutput 像一个扫描器实用程序类)似乎很简单。在我看来,为它们创建一个接口并实现那些明显的方法(无论是在预定义的box类中还是在我们自己的自定义类中)就像是语法糖。
如果有什么要看的,请帮我看穿。
更新: DataInput 以及 DataOutput 类生成序列化对象!:o

li9yvcax

li9yvcax1#

DataOutput 以及 DataInput 仅序列化/反序列化最基本的类型,即基元类型,而不是自定义或复杂对象。
这就是为什么 Writable ,以及它的方法 readFields(DataInput in) 以及 write(DataOutput out) ,我们可以序列化我们自己类的成员/示例变量并遍历它们的输入或输出。由于可写文件是为特定的类编写的,它们紧凑、小(而不是5字节长),因此提供了更高的性能,因为我们不必为类类型存储metdata,并且与java可串行化相比,它允许在分布式网络上进行流式传输。

相关问题