首页 > 基础资料 博客日记
Java InvalidObjectException异常详解(含代码分析)
2023-05-24 15:52:20基础资料围观908次
在Java中,InvalidObjectException是一个继承自ObjectStreamException的异常类。当对象流(Object Stream)试图从流中读取一个不符合序列化规则的对象实例时,就会抛出这个异常。
InvalidObjectException通常与实现了Serializable接口的类以及它们的readObject()方法有关。当readObject()方法在验证对象状态时发现不一致,或者无法恢复流中数据的有效状态时,可以抛出这个异常。
以下是一个简单的示例:
import java.io.*;
class MyClass implements Serializable {
private static final long serialVersionUID = 1L;
private int value;
public MyClass(int value) {
this.value = value;
}
private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
ois.defaultReadObject();
// 检查反序列化后对象的值是否合法
if (value < 0) {
throw new InvalidObjectException("Invalid value: " + value);
}
}
}
public class Main {
public static void main(String[] args) {
byte[] serializedData;
try (ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos)) {
MyClass myObj = new MyClass(-10);
oos.writeObject(myObj);
serializedData = baos.toByteArray();
} catch (IOException e) {
e.printStackTrace();
return;
}
try (ByteArrayInputStream bais = new ByteArrayInputStream(serializedData);
ObjectInputStream ois = new ObjectInputStream(bais)) {
MyClass deserializedObj = (MyClass) ois.readObject();
System.out.println(deserializedObj);
} catch (InvalidObjectException e){
System.out.print("捕获到InvalidObjectException异常:");
System.out.println(e.getMessage());
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}在这个示例中,我们在MyClass的readObject()方法中检查反序列化的对象是否具有有效值。如果值无效(例如,小于0),则会抛出InvalidObjectException。在main函数中,我们捕获此异常,并打印异常消息。
标签:
相关文章
最新发布
- 10389_基于Springboot的物资管理系统
- 分表路由:为什么大神都用 & (n-1),而不用 % ?一次给你讲透
- Erupt 1.13.2 版本已发布,支持甘特图,MCP,开源通知模块
- 数据结构-堆
- 数据同步神器!一款搞定多种数据源同步的开源中间件!
- 剑指offer-58、对称二叉树
- springboot~传统WEB应用开启CSRF
- 剑指offer-57、二叉树的下一个节点
- 【开源工具分享】一款开源的高效PDF合并与图片转换工具:mergePDF,一款轻量级桌面可视化工具,支持将多个PDF文件合并为单一PDF,也可将PDF转换为图片格式,并提供“单张图片”与“长图片”两种
- 剑指offer-56、删除链表中重复的节点

