【问题标题】:Deserialized Object throws exception of local class incompatible [duplicate]反序列化对象抛出本地类不兼容的异常[重复]
【发布时间】:2014-11-10 23:10:47
【问题描述】:

我想问一个问题..所以,我有一个这样的代码块:

MyOwnObject deserializedObject = null;
try{
    ByteArrayInputStream bis = new ByteArrayInputStream(serializedObject.getBytes());
    ObjectInputStream ois= new ObjectInputStream(bis);
    deserializedObject = (MyOwnObject)ois.readObject();
    ois.close();
}catch(Exception e){
    e.printStackTrace();
}

someMapper.insert(deserializedObject);

PS:serializedObject 是我之前从序列化过程中得到的一个字符串,我认为它运行良好。

更新: 代码抛出异常:

local class incompatible: stream classdesc serialVersionUID = 1360826667802527544, local class serialVersionUID = 1360826667806852920

在堆栈跟踪中有一些关于我的对象中某些属性的类型整数的东西..请原谅我的新手..:|

【问题讨论】:

  • 这样写代码没有意义。 (1) 永远不应该忽略异常,并且 (2) 依赖于 try 块中代码成功的代码也应该在 try 块中 inside。在这种情况下,deserializedObject 只有在 try 块中的所有内容都成功时才能存在,因此在该块之外使用它无论如何都是没有意义的。不要写这样的代码。
  • 谢谢..对不起,我还是个新手..谢谢你的提醒,现在我会永远记住你的建议 :) 虽然它抛出了一个异常,关于 serialVersionUID 的东西。 ..

标签: java object serialization deserialization iostream


【解决方案1】:

在 try catch 之前定义它:

MyOwnObject deserializedObject = null;

在 try/catch 中,确保删除声明,并将其更改为:

deserializedObject = (MyOwnObject)ois.readObject();

【讨论】:

  • 我之前已经试过了,当我调试它时,deserializedObject 仍然是 null 并且不能用于我在我的对象方法中放入的逻辑..虽然它适用于普通对象..
  • 首先,按照我上面的建议去做,这是正确的做法。现在,将 catch 块完全留空几乎总是一个坏主意。你知道它是否真的抛出了任何异常?
  • 是的,对不起,它抛出了异常:本地类不兼容:流类描述serialVersionUID = 1360826667802527544,本地类serialVersionUID = 1360826667806852920
猜你喜欢
  • 2014-11-11
  • 2012-01-10
  • 1970-01-01
  • 1970-01-01
  • 2012-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-09
相关资源
最近更新 更多