可能是因为实现Writable
会为我们提供一个可序列化的对象。我知道DataInput
和DataOutput
直接处理字节流,但直接读取它们的值并将其存储在原始类型中也没有害处。
话虽这么说,readFields()
和write()
方法的使用似乎是徒劳的,只能从模块化的 Angular 来看。为实例变量的DataInput
和DataOutput
类创建对象并直接获取输入(使用DataInput
和DataOutput
像Scanner实用程序类一样)看起来非常简单。据我所知,为它们创建一个接口(interface)并实现那些显而易见的方法(无论是在预定义的框类还是在我们自己的自定义类中)都看起来像语法糖。
如果有什么可看的,请帮助我查看。
更新:DataInput
和DataOutput
类产生序列化的对象! :o
最佳答案
DataOutput
和DataInput
仅序列化/反序列化最基本的类型,即基本类型,而不定制或复杂的对象。
这就是为什么通过实现Writable
以及反过来的readFields(DataInput in)
和write(DataOutput out)
方法,我们可以序列化我们自己类的成员/实例变量并遍历它们的输入或输出。而且由于Writables是为特定的类编写的,因此它们紧凑,小巧(and not 5-bytes long),因此提供了更高的性能,因为与Java Serializable相比,我们不必为类类型存储metdata,并且可以轻松地在分布式网络上进行流式传输。