2017-07-20 17 views
1

enumとシリアライゼーションに関してたくさんのトゥルーリアがありますが、私はこの記事を太陽で読むこともできますが、シリアル化する方法を見つけることはできません。なぜenumはjavaで別々にシリアライズ可能なのですか

列挙型定数は、通常の直列化可能または外部化可能オブジェクトとは異なる方法で直列化されます。列挙型定数の直列化形式は、その名前だけで構成されます。定数のフィールド値はフォームにはありません。列挙型定数を直列化するために、ObjectOutputStreamは、列挙型定数のnameメソッドによって返された値を書き込みます。 enum定数を直列化復元するために、ObjectInputStreamはストリームから定数名を読み取ります。デシリアライズされた定数は、java.lang.Enum.valueOfメソッドを呼び出して、定数のenum型と受信した定数名を引数として渡すことによって取得されます。

任意の例が理解できるであろう。

+0

あなたの問題は何ですか?あなたは何も追加せずに列挙型を直列化することができます、あなたはそれが動作していないことを試しましたか? – EsotericVoid

+0

@Bit上記のように、 "Enum定数は異なる順序で直列化されています"という意味です。違いは何ですかb/w通常のシリアル化とenum。 – shiv

+0

ここでは実際の質問は "どのようにenumがJavaで直列化されていますか?"です。回答の種類はhttps://stackoverflow.com/a/15522276/6768966で見つけることができます。 「私は太陽の下で記事を読むが、それをシリアル化する方法は見つけられない」一部は誤解を招いている、それはあなたがどのように、なぜそうではないかのように見える。 – EsotericVoid

答えて

2

すべての列挙型は、既にSerializableを実装しているjava.lang.Enumを暗黙的に拡張しています。したがって、あなたは特定の行動を取る必要はありません、それはすでにあなたのために行われています。

+0

なぜ、質問に言及しているように、enumと直列化にバズがあるのですか? – shiv

+0

実装は非常に効率的なやり方で行われるので、人々は独自のシリアライゼーションを作成し、不要なものを含めることができます。とにかく受信側のクラスが必要なので、enum定数以外は何も入れる必要はありません。 (さらに序数に最適化することもできますが、アイテムを挿入したクラスのバージョンによっては問題が発生する可能性があります...) – corsiKa

関連する問題