2012-04-30 5 views
1

オブジェクトのデフォルトの直列化機構が のクラスオブジェクトを書き込み、クラスのシグネチャ、およびすべての非transient の値と非静的フィールドジャワ - オブジェクトのデフォルトのシリアライズ

  1. "Class of the Object"と "Class Signature"の間に違いはありますか?
  2. "Class Signature"と "Class"も渡されているため、JVMはターゲットシステムのデフォルトクラスをロードしますか? (または)直列化されたオブジェクトに渡されるクラス?
+0

"デフォルトクラス"とはどういう意味ですか?デフォルトのクラスはありません。 –

+0

私はここで推測していますが、私はクラスが/ package/MyClass $ AnInnerClassのようになり、署名がそのpublic、それが何を拡張するのかといったようになります。誰でもこれを確認できますか? – jambriz

答えて

3

「オブジェクトのクラスを書き込む」という表現は、実際には、オブジェクトのクラスの名前を書き込むことを意味します。 Javaオブジェクトのシリアライゼーションは、クラスのバイトのみを記述し、クラスの名前のみを書き込みます。後でオブジェクトを直列化解除すると、現在のjvmで定義されているクラスバイトが使用されます。

0

シリアル化されたクラス定義は保存しません。シリアル化したインスタンスの内容だけを保存します。デシリアライズすると、JVMはクラスパスで見つかったクラス定義を使用します。

ですから、フィールド名とタイプ、およびシリアルバージョンUID私は「クラスの署名が」クラス(とserialisableスーパークラス)を参照するようになっていると信じてhow versionning works ...

0

を理解する必要があります。

デフォルトでは、ObjectInputStreamは、最新のクラスローダー(呼び出しスタックに最も近い非ブートストラップクラスローダー)のクラス名を検索します。指定されたクラスローダーを使用して、わかりやすいサブクラスを検索します。 RMIは、デフォルトでは(システムプロパティでそれを無効にして)、ストリームに埋め込まれたアノテーションから新しいクラスをロードする場所(URL)を見つけます。

関連する問題