3

Java にクラスがあり、データを保存し、オブジェクトを取得してシリアル化し、それをファイルに保存したとします。また、まったく同じクラスの別のプロジェクトがありますが、別のファイルで定義されていました。保存したファイルを取得して、そのプロジェクトでシリアル化を解除することはできますか?

4

5 に答える 5

0

クラス名とserialVersionUIDが同じである限り、これはうまくいくはずです。

于 2013-03-07T09:24:00.817 に答える
0

はい、それぞれのプロジェクトが問題のクラスに対して同じ(または互換性のある)「.class」ファイルを持っていると仮定すると、うまくいきます。

オブジェクトをシリアル化してから逆シリアル化すると、基本的にそのコピーが作成されます。シリアル化してから逆シリアル化すると、オブジェクト ID は保持されません。保存されるのは、オブジェクトの状態と、シリアル化された他のオブジェクトとの関係です。

これを次のように対比してください。

  • 直交永続性 - オブジェクトが 1 つだけであることをシステムが保証します。

  • オブジェクト リレーショナル マッピング - メモリ内に複数のレプリカが存在する可能性がありますが、システムはそれらをデータベース内に存在する「マスター」コピーと同期できます。

于 2013-03-07T09:24:24.233 に答える
0

これは、シリアライゼーションが設計されているものです。これにより、ある Java アプリから、異なる JVM および異なるコンピューターで動作する別の Java アプリにオブジェクトを渡すことができます。これは、ファイル、ネット、または DB を介して行うことができます。

于 2013-03-07T09:24:30.807 に答える
-1

serialVersionUIDを指定すると、それが可能になります。

UPD:ストリーム固有の識別子は、クラス名、インターフェイス クラス名、メソッド、およびフィールドの 64 ビット ハッシュです。

したがって、クラスが異なるインターフェースを実装している場合、問題に直面するはずです。シリアル化可能なクラスに serialVersionUID を指定することは、どのような方法でも良い方法です。

注 - デフォルトの serialVersionUID 計算は、コンパイラの実装によって異なる可能性があるクラスの詳細に非常に敏感であり、逆シリアル化中に予期しない serialVersionUID 競合が発生し、逆シリアル化が失敗する可能性があるため、すべてのシリアル化可能なクラスで serialVersionUID 値を明示的に宣言することを強くお勧めします。

一意の識別子をストリーミング

于 2013-03-07T09:26:47.187 に答える
-1

まったく同じクラスの別のプロジェクトがありますが、別のファイルでまだ定義されていました。

言い換えれば、ソース コードが同じパッケージ内にあると宣言されていない限り、ほぼ確実に別のクラスです。2 つの異なるパッケージ内の同様のソース コードは、同じクラスではなく、2 つの異なるクラスであり、一方を他方のように逆シリアル化することはできません。

于 2013-03-07T10:35:21.243 に答える