次のようなオブジェクトがあります。
public class Records implements java.io.Serializable{
private int cId;
private int pId;
private int vlaue;
private int tag;
public Records(int c, int p, int v, int t){
this.cId=c;
this.pId=p;
this.value=v;
this.tag=t;
}
}
大量のデータを収集し、上記のクラスのようにオブジェクトを構築し、それらをディスクにシリアライズしました。
クラス ファイルに含めるのを忘れていたダンプの 1 つに、各オブジェクトの値にアクセスするメソッドがあります。たとえば、特定のオブジェクトの cId 値にアクセスします。
このようなメソッドを追加するためにクラス定義を変更しましたが、オブジェクトを Records クラスに逆シリアル化できず、次のランタイム エラーが発生しました。
java.io.InvalidClassException: Records; local class incompatible: stream classdesc serialVersionUID = -1232612718276774474, local class serialVersionUID = -8244963718951538904
at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:579)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1600)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1513)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1749)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1346)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:368)
at DeSerialise.main(DeSerialise.java:21)
Javaにそれらが同じ定義であることを伝え、serialVersionUIDを変更する必要があると思いますが、どうすればよいかわかりませんか? どんなアイデアでも大歓迎です!