在没有serialVersionUID的情况下反序列化对象时出现问题 [英] issue while deserializing the object with no serialVersionUID
本文介绍了在没有serialVersionUID的情况下反序列化对象时出现问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
首先 我 获取 例外 - `
java 。 io 。 InvalidClassException local class 不兼容: stream classdesc serialVersionUID = 4597316331807173261 , local class serialVersionUID = -3344057582987646196`,
as `serialVersionUID` class COOKIE API HtmlUnit 我 am 使用,此 exception 发生 as 类 Cookie 是 已更改 因为 我们 upgrade version `HtmlUnit`, so what idea to my mind to avoid 匹配 `serialversionUID` 而 deserialing , so 我 有 尝试 < span class =code-leadattribute>解决方案 ::
I 覆盖 readClassDescriptor ObjectInputStre的class =code-leadattribute> am class this 方式
< pre lang =java> protected ObjectStreamClass readClassDescriptor() throws IOException , ClassNotFoundException {
ObjectStreamClass resultClassDescriptor = super 。 readClassDescriptor(); // 最初流描述符
类 localClass = Class .forName( resultClassDescriptor.getName()); // 此描述符所代表的本地JVM中的类。
if (localClass == null){
System 。 out .println(No local class for + resultClassDescriptor .getName());
return resultClassDescriptor;
}
ObjectStreamClass localClassDescriptor = ObjectStreamClass .lookup(localClass);
如果 (localClassDescriptor != null){ // 仅当类实现可序列化
final long localSUID = localClassDescriptor 跨度> getSerialVersionUID();
final long streamSUID < span class =code-leadattribute> = resultClassDescriptor .getSerialVersionUID();
如果 (streamSUID != localSUID){ // 检查serialVersionUID不匹配。
final StringBuffer s = new StringBuffer(Overriding serialized class version mismatch : );
s 。 append(local serialVersionUID = )。append(localSUID);
s .append( stream serialVersionUID = )。append(streamSUID);
异常 e = < span class =code-leadattribute> new InvalidClassException(s.toString());
系统。 out .println(潜在致命 反序列化 操作。 + e);
resultClassDescriptor = localClassDescriptor; // 使用本地类描述符进行反序列化
}
}
return resultClassDescriptor;
}
现在它将我的streamUID转换为LocalUID,但这个例外来找我
`StreamCorruptedException:无效的类型代码:00`
解决方案
Firstly I was getting the Exception - `
java.io.InvalidClassException local class incompatible: stream classdesc serialVersionUID = 4597316331807173261, local class serialVersionUID = -3344057582987646196`,
as there is not a `serialVersionUID` in the class COOKIE of the API HtmlUnit that I am using, this exception occurs as the class Cookie is changed because we upgrade the version of `HtmlUnit` , so what idea comes to my mind is to avoid the matching of `serialversionUID` while deserialing, so I have tried the below solution ::
I have overrided readClassDescriptor of ObjectInputStream class in this way
<pre lang="java">protected ObjectStreamClass readClassDescriptor() throws IOException, ClassNotFoundException {
ObjectStreamClass resultClassDescriptor = super.readClassDescriptor(); // initially streams descriptor
Class localClass = Class.forName(resultClassDescriptor.getName()); // the class in the local JVM that this descriptor represents.
if (localClass == null) {
System.out.println("No local class for " + resultClassDescriptor.getName());
return resultClassDescriptor;
}
ObjectStreamClass localClassDescriptor = ObjectStreamClass.lookup(localClass);
if (localClassDescriptor != null) { // only if class implements serializable
final long localSUID = localClassDescriptor.getSerialVersionUID();
final long streamSUID = resultClassDescriptor.getSerialVersionUID();
if (streamSUID != localSUID) { // check for serialVersionUID mismatch.
final StringBuffer s = new StringBuffer("Overriding serialized class version mismatch: ");
s.append("local serialVersionUID = ").append(localSUID);
s.append(" stream serialVersionUID = ").append(streamSUID);
Exception e = new InvalidClassException(s.toString());
System.out.println("Potentially Fatal Deserialization Operation. " + e);
resultClassDescriptor = localClassDescriptor; // Use local class descriptor for deserialization
}
}
return resultClassDescriptor;
}
and Now it converts my streamUID to LocalUID but this exception comes to me
`StreamCorruptedException: invalid type code: 00`
解决方案
这篇关于在没有serialVersionUID的情况下反序列化对象时出现问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文