-1

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

话虽如此,readFields()andwrite()方法的使用似乎是徒劳的,只能从模块化的角度使用。为实例变量创建对象DataInputDataOutput类并直接获取输入(使用DataInputDataOutput类似 Scanner 实用程序类)似乎非常简单。就我所见,为它们创建一个接口并实现那些明显的方法(无论是在预定义的盒子类还是我们自己的自定义类中)看起来就像语法糖。

如果有什么可以看的,请帮我看穿。

更新DataInputDataOutput产生序列化对象!:o

4

1 回答 1

1

DataOutput并且DataInput仅序列化/反序列化最基本的类型,即原始类型,而不是自定义或复杂对象。

这就是为什么通过实现Writable,进而实现其方法readFields(DataInput in)write(DataOutput out),我们可以序列化我们自己类的成员/实例变量并遍历它们的输入或输出。而且由于可写对象是为特定的类编写的,它们紧凑、小(并且不是 5 字节长),因此提供了更高的性能,因为我们不必存储类类型的元数据,并且允许通过分布式网络轻松流式传输与Java Serializable相比。

于 2016-07-11T11:41:36.950 回答