Java反序列化遇见的ClassNotFoundException

MAKEMEFATTER 2017-03-28 03:13:02
原意是想把一个文件反序列化成一个Object对象,但是在执行下面这条语句时抛出了异常,不知道为什么。
抛出异常语句:
Object object = in.readObject();

完整反序列化代码:

FileInputStream fileIn = new FileInputStream(filename);
ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(fileIn));
Object object = in.readObject();

错误信息:


看了一下抛出的异常,应该是类名包名和现在工程的包名不一致所导致的。因为这段代码以及刚开始时序列化导出的文件的是我从另一个项目中拿过来的,所以请问有什么解决方法吗?

还是说我只能重新先序列化出一个文件再对新的文件进行反序列化操作?
...全文
455 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_36784449 2020-04-22
  • 打赏
  • 举报
回复
请问你最后的实现方式可以提供一下么?
L_lipo 2019-07-20
  • 打赏
  • 举报
回复
引用 2 楼 qq_38237380 的回复:
需要给对象类加id 我也是昨天学到这里
只加id不能解决问题,不同包还是不行
L_lipo 2019-07-20
  • 打赏
  • 举报
回复
重写ObjectInputStream类,把包名替换 public class MyObjectInputStream extends ObjectInputStream { protected MyObjectInputStream() throws IOException, SecurityException { super(); } public MyObjectInputStream(InputStream arg0) throws IOException { super(arg0); } @Override protected Class<?> resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException{ String name = desc.getName(); try { if(name.startsWith("com.cluster.manager.storage_manage")) name = name.replace("com.cluster.manager.storage_manage", "com.cluster.manager.project_manage"); return Class.forName(name); } catch (ClassNotFoundException ex) { ex.printStackTrace(); } return super.resolveClass(desc); } }
qq_38237380 2017-04-09
  • 打赏
  • 举报
回复
需要给对象类加id 我也是昨天学到这里
MAKEMEFATTER 2017-04-08
  • 打赏
  • 举报
回复
最后只能自己重新生成了一个文件,然后不用继承接口的方式实现序列化,而是自己写了工具类进行序列化与反序列化了。

50,530

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧