首页 > 基础资料 博客日记
Java InvalidObjectException异常详解(含代码分析)
2023-05-24 15:52:20基础资料围观752次
在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--如何整体读取多个配置属性及其相关操作
- 个人网站一键引入免费开关评论功能 giscus
- Java开发笔记(一百五十五)生成随机数的几种途径
- 榨干 Claude Code 的 16 个实用小技巧(高端玩法,建议收藏!)
- NBA巨星詹姆斯表变老嫂子了?这锅Viggle Ai得背/Ai视频创作/Ai魔性视频创作/Ai优质视频创作
- Java简历、面试、试用期、转正
- 使用Apollo配置中心,**静态字段通过`@Value`的setter方法可以实现热更新**
- vivo Pulsar 万亿级消息处理实践(3)-KoP指标异常修复
- MybatisPlus使用详情
- G1收集器:JVM垃圾回收的新一代王者