2012-03-23 7 views
0

私のシリアライズ可能なクラスは、静的メソッドをクラスに追加した後にobjectinputstreamで読み込まれません。 javadocでは、静的メソッドを直列化可能クラスに追加すると、非互換性が作成されることはありますか? Javaオブジェクト直列化仕様で静的メソッドを追加してシリアライズ可能なクラスを変更する、

+0

詳細な情報がなくても、実際に問題を診断することは不可能です。いくつかのコードを投稿して、もう少し問題を説明してください。 –

+0

スレッド "メイン"の例外java.io.InvalidClassException:ローカルクラスが互換性がありません:クラスclassdesc serialVersionUID = 2421933566308851961、ローカルクラスserialVersionUID = 6969314805631849195、すべて私は静的メソッドを追加して、古いシリアルUIDで問題を修正しました –

+0

ありがとう。これは、もちろん、Jon Skeetがあなたの問題を解決したことを意味します。これは決して驚くことではありません。 –

答えて

4

、セクション4.6

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

...メソッド名とシグニチャーでソートされたprivateでない各メソッドの場合

  • メソッドの名前。
  • 32ビット整数として記述されたメソッドの修飾子。
  • メソッドの記述子。

いいえ、私はそれが実際にどちらかのシリアル化された状態の互換性を破ることができるかうまくいかないことができますが、それはデフォルトのJavaバイナリシリアルを回避いずれか価値が、なぜこれが(Protocol Buffers用など)であるまたはいつも自分でserialVersionUidと宣言しています。

関連する問題