java 在不同的类中阅读和写(序列化)静态嵌套类对象

svujldwt  于 2024-01-05  发布在  Java
关注(0)|答案(3)|浏览(162)

我想序列化一个Map<String,CustomClass>对象,它包含一个静态嵌套的CustomClass对象作为它的值。

  1. public class A{
  2. static Map<String, CustomClass> map = new HashMap<>();
  3. public static void main(String[] args) {
  4. map.put("ABC", new CustomClass(1, 2L, "Hello"));
  5. writeToFile();
  6. }
  7. private static void writeToFile() throws IOException, ClassNotFoundException {
  8. ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("file.ser"));
  9. out.writeObject(map);
  10. }
  11. private static class CustomClass implements Serializable {
  12. int x;
  13. long y;
  14. String z;
  15. private static final long serialVersionUID = 87923834787L;
  16. private CustomClass (int x, long y, String z) {
  17. .....
  18. }
  19. }
  20. }
  21. public class B {
  22. static Map<String, CustomClass> map = new HashMap<>();
  23. public static void main( String[] args) {
  24. readFromFile();
  25. }
  26. private static void readFromFile() throws IOException, ClassNotFoundException {
  27. ObjectInputStream out = new ObjectInputStream(new FileInputStream("file.ser"));
  28. map = out.readObject(); // ClassNotFoundException occured
  29. }
  30. private static class CustomClass implements Serializable {
  31. int x;
  32. long y;
  33. String z;
  34. private static final long serialVersionUID = 87923834787L;
  35. private CustomClass (int x, long y, String z) {
  36. .....
  37. }
  38. //some utility methods
  39. ....
  40. }
  41. }

字符串
当我试图读取序列化的Map对象时,它抛出ClassNotFoundException。这是因为在不同类下定义的相同嵌套类将具有不同的名称或版本吗?
这个问题的可能解决办法是什么?

bxfogqkk

bxfogqkk1#

是否因为在不同类下定义的同一个内部类会有不同的名称或版本?
这是因为“同一个内部类定义在不同的类之下”是一个矛盾的术语。它 * 不是 * 相同的。它是一个不同的类。
NB static inner * 也 * 是一个术语上的矛盾。

ua4mk5z4

ua4mk5z42#

嵌套类全名包括封闭类名称。A写入A$CustomClass,而B具有B$CustomClass

zwghvu4y

zwghvu4y3#

在你的class B我已经更换了下面的行,它为我工作得很好。

  1. map = (Map<String, CustomClass>) out.readObject();//Line no 19

字符串
此外,我无法找到一个方法,readObject(Object)与对象作为一个参数,在ObjectInputStream

相关问题