可能是因为实现 Writable
会给我们一个可序列化的对象。我知道DataInput
和 DataOutput
直接处理字节流,但我认为直接从它们中读取值并将其存储在原始类型中也没有什么坏处。
话虽这么说,readFields()
和 write()
方法似乎是徒劳的,只能从模块化的角度使用。为 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 相比,我们不必存储类类型的元数据并允许通过分布式网络轻松流式传输。 .
关于java - 可以直接使用DataInput和DataOutput,为什么还要使用Writable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38303659/