在没有serialVersionUID的情况下反序列化对象时出现问题

编程入门 行业动态 更新时间:2024-10-27 01:21:48
本文介绍了在没有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 我 有 尝试 解决方案 :: 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 = 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 = 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的情况下反序列化对象时出现问题

本文发布于:2023-11-06 14:44:53,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1563984.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:情况下   对象   序列化   serialVersionUID

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!