1

オブジェクトのデフォルトのシリアライゼーション メカニズムは、オブジェクトのクラス、クラス シグネチャ、すべての非一時的および非静的フィールドの値を書き込みます。

  1. ここで「オブジェクトのクラス」と「クラス署名」に違いはありますか?
  2. 「Class Signature」と「Class」も渡されたので、JVM はデフォルト クラスをターゲット システムにロードしますか? (または) シリアル化されたオブジェクトで渡されるクラス?
4

3 に答える 3

3

「オブジェクトのクラスを書き込む」というフレーズは、実際には「オブジェクトのクラスを書き込む」という意味です。Java オブジェクトのシリアル化では、クラスのバイトは書き込まれず、クラスの名前のみが書き込まれます。オブジェクトが後で逆シリアル化されるとき、現在の jvm で定義されたクラス バイトが使用されます。

于 2012-04-30T17:29:49.157 に答える
0

ある種のシリアライズされたクラス定義を保存するのではなく、シリアライズしたインスタンスの内容だけを保存します。デシリアライズするとき、JVM はクラスパスで見つけたクラス定義を使用します。

したがって、バージョン管理がどのように機能するかを理解する必要があります...

于 2012-04-30T17:34:36.060 に答える
0

「クラス署名」は、クラスの(およびシリアライズ可能なスーパークラスの)フィールド名とタイプ、およびシリアルバージョンの UID を参照することになっていると思います。

デフォルトでObjectInputStreamは、「最新」のクラス ローダー (つまり、コール スタックで最も近い非ブートストラップ クラス ローダー) でクラス名を検索します。指定されたクラス ローダーを使用した適切なサブクラスのルックアップ。RMI はデフォルトで (システム プロパティでオフにします)、ストリームに埋め込まれた注釈から新しいクラスをロードする場所 (URL) を見つけます。

于 2012-04-30T17:35:08.790 に答える