スタティックネストされたCustomClassオブジェクトをその値として含むMapオブジェクトをシリアル化する必要があります。異なるクラスの静的ネストされたクラスオブジェクトの読み込みと書き込み(シリアライズ)
public class A{
static Map<String, CustomClass> map = new HashMap<>();
public static void main(String[] args) {
map.put("ABC", new CustomClass(1, 2L, "Hello"));
writeToFile();
}
private static void writeToFile() throws IOException, ClassNotFoundException {
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("file.ser"));
out.writeObject(map);
}
private static class CustomClass implements Serializable {
int x;
long y;
String z;
private static final long serialVersionUID = 87923834787L;
private CustomClass (int x, long y, String z) {
.....
}
}
}
public class B {
static Map<String, CustomClass> map = new HashMap<>();
public static void main(String[] args) {
readFromFile();
}
private static void readFromFile() throws IOException, ClassNotFoundException {
ObjectInputStream out = new ObjectInputStream(new FileInputStream("file.ser"));
map = out.readObject(); // ClassNotFoundException occured
}
private static class CustomClass implements Serializable {
int x;
long y;
String z;
private static final long serialVersionUID = 87923834787L;
private CustomClass (int x, long y, String z) {
.....
}
//some utility methods
....
}
}
シリアル化されたMapオブジェクトを読み込もうとすると、ClassNotFoundExceptionがスローされます。異なるクラスの下で定義された同じネストされたクラスは異なる名前またはバージョンを持つためですか?
この問題の可能な解決方法は何か。 ありがとう
"readObject(Object)"ここでデモコードを入力するのは間違いでした。それをout.readObject()として読んでください –
それは 'クラスB'を実行している間に'クラスA '自体が見つからないことを意味します。 'Class B'を実行する前にクラスパスをチェックすることができますか、SystemClassloaderを利用してプログラム自体を実行している間にクラスパスを記録することができます。 – Praveen