如何从文件反序列化到其他类 - java

我将ArrayList<packageA.Changelog> list序列化为一个文件,并将该文件传输到另一台计算机上的另一个系统。

由于接收文件的系统是不同的,因此我没有相同的packageA.Changelog类,而是结构完全相同但包装不同的packageB.Changelog

当我使用
ArrayList<packageB.Changelog> changelogs = (ArrayList<packageB.Changelog>)ois.readObject();
从文件中读取,我得到了ClassCastException

如何避免这种异常?是否仅在接收列表时需要在其他系统中创建相同的包结构?

参考方案

是的,您可以做三件事之一。

  • 使用相同的包名称
  • 创建相同的类

  • 创建一个接口(当然,在两台计算机上都使用相同的包),并将其发送到客户端计算机上。您所有的类都可以在不同的程序包中实现此接口。例如,您的接口可以命名为Loggable,它应该具有声明的所有方法,这些方法现在都在ChangeLog类中。
  • 或者最后,不要完全使用类“ChangeLog”,而要完全避免使用它,而应使用默认情况下可序列化的HashMap。而且您不必将任何物品运送到您的客户端(其他)机器。您将能够序列化ArrayList并将其转换回另一台计算机上的对象。
  • 然后,实现类Loggable的所有类都可以转换为该类型。
    我希望这有帮助

    Java:从类中查找项目名称 - java

    仅通过类的实例,如何使用Java反射或类似方法查找项目名称?如果不是,项目名称(我真正想要的是)可以找到程序包名称吗? 参考方案 项目只是IDE使用的简单组织工具,因此项目名称不是类或JVM中包含的信息。要获取软件包,请使用Class#getPackage()。然后,可以调用Package#getName()将包作为您在代码的包声明中看到的String来获取…

    Java:从文件系统加载资源 - java

    我的项目设定我有以下项目设置:\program.jar \images\logo.png 在我的代码中,我使用相对URL "images/logo.png"引用图像。问题如果我在目录中使用以下命令运行此程序:c:\projects\program_dir\bin\>java -jar program.jar 然后一切正常,Java能…

    Java:正则表达式模式匹配器是否有大小限制? - java

    我的模式类似于OR:“word1 | word2 | word3”我大约有800个字。可能有问题吗? 参考方案 您仅受记忆和理智的限制。 :)

    Java:线程池如何将线程映射到可运行对象 - java

    试图绕过Java并发问题,并且很难理解线程池,线程以及它们正在执行的可运行“任务”之间的关系。如果我创建一个有10个线程的线程池,那么我是否必须将相同的任务传递给池中的每个线程,或者池化的线程实际上只是与任务无关的“工人无人机”可用于执行任何任务?无论哪种方式,Executor / ExecutorService如何将正确的任务分配给正确的线程? 参考方案 …

    JAVA:字节码和二进制有什么区别? - java

    java字节代码(已编译的语言,也称为目标代码)与机器代码(当前计算机的本机代码)之间有什么区别?我读过一些书,他们将字节码称为二进制指令,但我不知道为什么。 参考方案 字节码是独立于平台的,在Windows中运行的编译器编译的字节码仍将在linux / unix / mac中运行。机器代码是特定于平台的,如果在Windows x86中编译,则它将仅在Win…