2016-07-11 5 views
-2

おそらくWritableを実装すると、シリアライズ可能なオブジェクトが表示されるためです。 DataInputDataOutputバイトストリームと直接対話していますが、値を直接読み込んでプリミティブ型に保存することはありません。つまり、readFields()write()の方法の使用は無益なように見え、モジュール性の観点からしか使用できませんでした。インスタンス変数のためのDataInputDataOutputクラスのオブジェクトを作成し、直接入力を取る(スキャナユーティリティクラスのようにDataInputDataOutputを使用する)のはかなり簡単です。それらのためのインターフェイスを作成し、これらの明白なメソッド(事前定義されたボックスクラスまたは独自のカスタムクラスにある)を実装することは、私が見る限り、構文的な砂糖のように見えます。DataInputとDataOutputを直接使用できるときに書き込み可能な理由

何かが見えるようになったら見てください。

更新DataInputおよびDataOutputクラスはシリアル化されたオブジェクトを生成します。 :O

+0

'Writable'は直列化可能オブジェクトを生成せず、' DataInput'または 'DataOutput'も行いません。あなたが何を求めているのか、あなたが話していることは不明です。 – EJP

+0

[Writableの理由は何ですか?](http://stackoverflow.com/q/17203661/207421)の可能な複製。 – EJP

+0

@EJPすべてがそうです。 [ここ](https://acadgild.com/blog/writable-and-writablecomparable-in-hadoop/)と[ここ](https://www.google.co.in/url?sa=t&rct=j&q= &ESRC = S&ソース=ウェブ&CD = 1&CAD = RJA&UACT = 8&VED = 0ahUKEwiRs4aNkuvNAhUJPxoKHTWgDCEQFggdMAA&URL = HTTPS%3A%2F%2Fhadoop.apache.org%2Fdocs%2Fr2.6.1%2Fapi%2Forg%2Fapache%2Fhadoop%2Fio%2FWritable.html&USG = AFQjCNEz5Mh9TeOMqXd8AX74QxlfFMzCzw&SIG2 = 35nxbPRITVf6lfzivGUSjw) 。 2番目のコメントの質問は、何か他のことについて話しています。タイトルを読むだけではありません! –

答えて

0

DataOutputおよび/ deserialze DataInputにserialize唯一の最も基本的なタイプ、つまり、プリミティブ型なくカスタムまたは複雑なオブジェクト。

Writableを実装し、そのメソッドreadFields(DataInput in)write(DataOutput out)を実装することで、独自のクラスのメンバー/インスタンス変数をシリアル化して入力または出力をトラバースすることができます。 Writableは特定のクラス用に書かれているため、コンパクトで小さな(and not 5-bytes long)なので、クラスタイプのメタデータを保存する必要がなく、分散ネットワーク上で簡単にストリーミングできるため、パフォーマンスが向上します。Java Serializable

関連する問題