首页 > 基础资料 博客日记
Java InvalidObjectException异常详解(含代码分析)
2023-05-24 15:52:20基础资料围观772次
在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函数中,我们捕获此异常,并打印异常消息。
标签:
相关文章
最新发布
- springboot~3.x项目中使用集成测试
- Java测试类、工具类与JavaBean对比解析
- SpringBoot-日志
- springboot~http2的支持
- 解疑释惑 - 日志体系之 slf4j + logback 组合(一)
- Web server failed to start. Port 8080 was already in use. 端口被占用
- Springboot 项目配置多数据源
- 伙伴匹配系统(移动端 H5 网站(APP 风格)基于Spring Boot 后端 + Vue3 - 05
- 剑指offer-23、搜索⼆叉树的后序遍历序列
- 一个表示金额的数字是 100000000L,这是多少米?