既然可以直接使用DataInput和DataOutput,为什么还要使用Writable呢?

Why to use Writable when we can directly use DataInput and DataOutput?

可能是因为实施 Writable 会给我们提供一个可序列化的对象。我知道 DataInputDataOutput 直接处理 字节流 但我认为直接从它们中读取值并将其存储在原始类型中没有任何害处。

也就是说,readFields()write() 方法的使用似乎是徒劳的,只能从模块化的角度使用。为实例变量 DataInputDataOutput classes 创建对象并直接获取输入(使用 DataInputDataOutput 就像扫描程序实用程序 class)看起来很简单。为它们创建接口并实现那些显而易见的方法(无论是在预定义框 classes 还是我们自己的自定义 classes 中)在我看来就像是语法糖。

有什么看的帮我看一下

UPDATEDataInputDataOutput classes 生成序列化对象! :o

DataOutputDataInput serialize/deserialze 只有最基本的类型,即 原始类型 而不是自定义或复杂对象.

这就是为什么通过实现Writable,进而实现它的方法readFields(DataInput in)write(DataOutput out),我们可以序列化我们自己的class的members/instance变量] 并遍历它们的输入或输出。由于 Writables 是为特定的 classes 编写的,因此它们紧凑、小巧 (and not 5-bytes long) and so provide higher performance as we don't have to store the metdata for the class type and allow easy streaming over the distributed network as compared to Java Serializable