hudengzhu 2023-04-11 19:30 采纳率: 71.4%
浏览 16
已结题

关于文件反序列化的问题


public static void main(String[] args)  {
    File dir = new File(".");
    File[]  subs = dir.listFiles((f)->f.getName().endsWith(".obj"));
    for (int i = 0; i < subs.length; i++) {
        try {
            File sub=subs[i];
            FileInputStream fis = new FileInputStream(sub);
            ObjectInputStream ois = new ObjectInputStream(fis);
            Object obj = ois.readObject();
            User use = (User)obj;
            System.out.println(use);
        } catch (IOException |ClassNotFoundException e) {
            e.printStackTrace();
        }

    }
}


}

如上,执行当前文件目录下的.obj文件反序列化时会出现异常报错

img

  • 写回答

1条回答 默认 最新

  • Leodong. 2023-04-11 20:36
    关注

    该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:

    根据你提供的截图,可以看到反序列化时出现了 java.lang.ClassNotFoundException 异常,这个异常通常是由于未找到序列化对象的类定义导致的。在反序列化时,Java 需要根据序列化对象中的类名查找对应的类定义,如果类定义不存在,就会抛出 ClassNotFoundException 异常。

    你可以尝试检查你的代码中,序列化对象所引用的类是否存在,或者是否正确地导入了该类的定义。如果你使用的是第三方库或者框架,可能需要检查是否正确地配置了类路径。

    另外,在反序列化之前,建议先检查序列化对象的版本号是否与当前类定义的版本号匹配。如果版本号不匹配,反序列化可能会失败。你可以在序列化对象中添加版本号,例如:

    public class User implements Serializable {
        private static final long serialVersionUID = 1L;
        // ...
    }
    

    最后,建议在捕获 ClassNotFoundException 异常时,打印出更详细的错误信息,以便更好地了解问题。例如,你可以在捕获异常后,打印出异常消息和堆栈信息,如下所示:

    try {
        // 反序列化操作
    } catch (IOException | ClassNotFoundException e) {
        System.err.println("反序列化失败:" + e.getMessage());
        e.printStackTrace();
    }
    

    这样可以帮助你更好地了解问题,并找到解决方案。


    如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月14日
  • 已采纳回答 4月14日
  • 修改了问题 4月11日
  • 创建了问题 4月11日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效