【发布时间】:2014-11-11 02:25:26
【问题描述】:
这是我的代码:
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
在堆栈跟踪中,有一些关于我的对象中某些属性的类型 Integer 的信息。
更新: serializeObject 是一个字符串,来自这段代码:
try {
ByteArrayOutputStream bo = new ByteArrayOutputStream();
ObjectOutputStream so = new ObjectOutputStream(bo);
so.writeObject(myObject);
so.flush();
serializedObject = bo.toString();
}catch (Exception e) {
System.out.println(e);
}
回答:
//Serialization from object to string
String serializedObject="";
try{
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(object);
oos.flush();
serializedObject = new String(Base64.encode(baos.toByteArray()));
oos.close();
}catch(Exception e){
e.printStackTrace();
}
//Deserialization from string to object
MyOwnObject deserializedObject = null;
try{
byte[] bytes = Base64.decode(serializedObject.getBytes());
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
ObjectInputStream ois = new ObjectInputStream(bais);
deserializedObject = (MyOwnObject)ois.readObject();
ois.close();
}catch(Exception e){
e.printStackTrace();
}
从这里,我可以使用deserializedObject作为对象,效果很好!
【问题讨论】:
-
serializedObject是什么以及如何创建? -
它来自 ByteArrayOutputStream bo = new ByteArrayOutputStream(); ObjectOutputStream so = new ObjectOutputStream(bo);所以.writeObject(myObject);所以.flush(); serializedObject = bo.toString();
-
serializedObject 是一个字符串:这可能是问题所在。对象被序列化为字节,而不是字符。不要将二进制字节转换为字符串。
-
@NicoPratama 您应该使用
serializedObject的详细信息编辑您的问题,而不是在评论中添加它。 -
这是一个错误的方法。但是请参阅我编辑的答案,最后我提到了如何从序列化对象创建
String。
标签: java spring exception serialization stream