-1

おそらく、実装Writableするとシリアライズ可能なオブジェクトが表示されるためです。私はバイトストリームを知っていDataInputDataOutput直接扱っていますが、それらから値を直接読み取ってプリミティブ型に格納しても害はありません。

そうは言っても、readFields()andwrite()メソッドの使用自体は無駄に思え、モジュール性の観点からのみ使用できます。インスタンス変数のオブジェクトDataInputDataOutputクラスを作成し、入力を直接受け取る (スキャナ ユーティリティ クラスのように使用するDataInput)DataOutputことは非常に簡単に思えます。それらのインターフェイスを作成し、それらの明白なメソッドを実装すること (事前定義されたボックス クラスまたは独自のカスタム クラスのいずれか) は、私が見る限り、構文糖衣のように見えます。

見るべきものがあれば、私がそれを通して見るのを手伝ってください。

UPDATE :クラスはシリアル化されたオブジェクトを生成しますDataInput! DataOutput:o

4

1 に答える 1

1

DataOutputDataInput最も基本的な型、つまりプリミティブ型のみをシリアライズ/デシリアライズし、カスタム オブジェクトや複雑なオブジェクトはシリアライズ/デシリアライズしません。

Writableこれが、 とそのメソッドreadFields(DataInput in)およびを実装write(DataOutput out)することで、独自のクラスのメンバー/インスタンス変数をシリアル化し、それらの入力または出力をトラバースできる理由です。また、Writable は特定のクラス用に作成されているため、コンパクトで小さく(5 バイト長ではありません)、クラス タイプのメタデータを保存する必要がなく、分散ネットワークを介した簡単なストリーミングを可能にするため、パフォーマンスが向上します。Java Serializableと比較して。

于 2016-07-11T11:41:36.950 に答える