(每日持续更新)jdk api之ObjectStreamException基础、应用、实战

news2024/10/5 21:20:49

博主18年的互联网软件开发经验,从一名程序员小白逐步成为了一名架构师,我想通过平台将经验分享给大家,因此博主每天会在各个大牛网站点赞量超高的博客等寻找该技术栈的资料结合自己的经验,晚上进行用心精简、整理、总结、定稿,每天都会整理到12点,为了就是能让大家能够真正了解该技术栈的真正原理,最终从程序员成为一名真正的架构师,写的不一定是全站做好的,但是是全站最用心的~。

以后我会推出一些列的文章,每天都会更新,每天进步一点点,发布顺序【java的api基础、应用、实战】->【java开源技术栈及源码分析】->【java开源技术栈整合】->【java低代码开发平台的建设】

关注【架构师成长之道】 输入“java基础课程”,即可免费获得全套架构师全套课程

 

一、java.io

1.52 ObjectStreamException

ObjectStreamException 是所有对象流异常的父类。它是一个受检查的异常,用于表示在对象流操作期间可能发生的异常情况。这个类通常不直接实例化,而是由其子类来表示特定的异常情况。

ObjectStreamException 类介绍:
所有字段:
  • 没有公共字段。

构造方法:
  • ObjectStreamException():构造一个新的 ObjectStreamException 实例,其中 detail message 为 null。

方法摘要:
  • 没有公共方法。

简单使用例子:

由于 ObjectStreamException 是一个异常类,因此通常不会直接使用它,而是使用其子类来表示特定的异常情况。以下是一个简单的示例,演示了如何捕获 ObjectStreamException 异常:

javaCopy code
import java.io.*;
​
public class ObjectStreamExceptionExample {
​
    public static void main(String[] args) {
        try {
            // 尝试执行可能抛出 ObjectStreamException 的操作
            serializeObject(null, "nonexistentfile.ser");
        } catch (ObjectStreamException e) {
            // 捕获 ObjectStreamException 并处理
            System.err.println("An ObjectStreamException occurred: " + e.getMessage());
        }
    }
​
    private static void serializeObject(Object obj, String filename) throws ObjectStreamException {
        try (ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream(filename))) {
            outputStream.writeObject(obj);
            System.out.println("Object serialized successfully.");
        } catch (IOException e) {
            // 如果发生 I/O 异常,则封装为 ObjectStreamException 并抛出
            throw new ObjectStreamException("Error occurred while serializing object: " + e.getMessage());
        }
    }
}

在这个示例中,serializeObject 方法尝试将对象写入文件。如果写入过程中发生了 I/O 异常,它将捕获并将异常转换为 ObjectStreamException,然后重新抛出。在 main 方法中,我们尝试调用 serializeObject 方法,并捕获可能抛出的 ObjectStreamException

应用场景

ObjectStreamException 通常在对象序列化和反序列化的过程中出现,其子类可以表示不同的异常情况。以下是一些可能的应用场景及相应的代码实现:

应用场景 1: 序列化对象时文件不存在
javaCopy code
import java.io.*;
​
public class SerializationExample {
​
    public static void main(String[] args) {
        try {
            // 尝试将对象序列化到不存在的文件
            serializeObject(null, "nonexistentfile.ser");
        } catch (ObjectStreamException e) {
            // 捕获 ObjectStreamException 并处理
            System.err.println("An ObjectStreamException occurred: " + e.getMessage());
        }
    }
​
    private static void serializeObject(Object obj, String filename) throws ObjectStreamException {
        try (ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream(filename))) {
            outputStream.writeObject(obj);
            System.out.println("Object serialized successfully.");
        } catch (IOException e) {
            // 如果发生 I/O 异常,则封装为 ObjectStreamException 并抛出
            throw new ObjectStreamException("Error occurred while serializing object: " + e.getMessage());
        }
    }
}

在这个示例中,尝试将对象序列化到一个不存在的文件中。当文件不存在时,会抛出 IOExceptionserializeObject 方法将捕获并将其封装为 ObjectStreamException 并抛出。

应用场景 2: 反序列化对象时文件损坏
javaCopy code
import java.io.*;
​
public class DeserializationExample {
​
    public static void main(String[] args) {
        try {
            // 尝试从损坏的文件中反序列化对象
            deserializeObject("corruptedfile.ser");
        } catch (ObjectStreamException e) {
            // 捕获 ObjectStreamException 并处理
            System.err.println("An ObjectStreamException occurred: " + e.getMessage());
        }
    }
​
    private static Object deserializeObject(String filename) throws ObjectStreamException {
        try (ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream(filename))) {
            Object obj = inputStream.readObject();
            System.out.println("Object deserialized successfully.");
            return obj;
        } catch (IOException | ClassNotFoundException e) {
            // 如果文件损坏或对象类不匹配,则封装为 ObjectStreamException 并抛出
            throw new ObjectStreamException("Error occurred while deserializing object: " + e.getMessage());
        }
    }
}

在这个示例中,尝试从一个损坏的文件中反序列化对象。当文件损坏或对象类不匹配时,会抛出 IOExceptionClassNotFoundExceptiondeserializeObject 方法将捕获并将其封装为 ObjectStreamException 并抛出。

实战例子

在一个实际项目中,ObjectStreamException 可能会在对象序列化和反序列化的过程中出现。以下是一个简单的实战例子,演示如何在 Java 中使用对象序列化和反序列化来保存和加载对象数据。

假设你正在开发一个简单的学生管理系统,你想要保存学生对象到文件中以便将来使用,同时还能够从文件中加载学生对象。你可以使用对象序列化和反序列化来实现这一功能。

首先,我们定义一个 Student 类表示学生对象:

javaCopy code
import java.io.Serializable;
​
public class Student implements Serializable {
    private static final long serialVersionUID = 1L;
    private int id;
    private String name;
​
    public Student(int id, String name) {
        this.id = id;
        this.name = name;
    }
​
    public int getId() {
        return id;
    }
​
    public String getName() {
        return name;
    }
​
    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}

接下来,我们编写一个类来保存和加载学生对象:

javaCopy code
import java.io.*;
​
public class StudentManager {
    public static void saveStudent(Student student, String filename) {
        try (ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream(filename))) {
            outputStream.writeObject(student);
            System.out.println("Student saved successfully.");
        } catch (IOException e) {
            System.err.println("Error occurred while saving student: " + e.getMessage());
        }
    }
​
    public static Student loadStudent(String filename) {
        try (ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream(filename))) {
            Student student = (Student) inputStream.readObject();
            System.out.println("Student loaded successfully.");
            return student;
        } catch (IOException | ClassNotFoundException e) {
            System.err.println("Error occurred while loading student: " + e.getMessage());
            return null;
        }
    }
​
    public static void main(String[] args) {
        // 保存学生对象到文件
        Student student1 = new Student(1, "Alice");
        saveStudent(student1, "student.ser");
​
        // 从文件中加载学生对象
        Student loadedStudent = loadStudent("student.ser");
        if (loadedStudent != null) {
            System.out.println("Loaded student: " + loadedStudent);
        }
    }
}

在这个例子中,我们首先创建了一个 Student 类来表示学生对象。然后,我们编写了一个 StudentManager 类来保存和加载学生对象。saveStudent 方法将学生对象保存到文件中,而 loadStudent 方法则从文件中加载学生对象。在 main 方法中,我们演示了如何使用这些方法来保存和加载学生对象。

这个示例展示了如何在实际项目中使用对象序列化和反序列化来保存和加载对象数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1469108.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

联想开天昭阳N4620Z笔记本如何恢复出厂麒麟操作系统(图解)

联想开天昭阳N4620Z笔记本简单参数: 中央处理器:KX-6640MA G2 内存:8GB 固态硬盘:512GB SSD 显示器:14.0”FHD 电池:4Cell 操作系统:麒麟KOS中文RTM(试用版) 此款笔…

[深度学习]yolov9+bytetrack+pyqt5实现目标追踪

【简介】 目标追踪简介 目标追踪是计算机视觉领域中的一个热门研究方向,它涉及到从视频序列中实时地、准确地跟踪目标对象的位置和运动轨迹。随着深度学习技术的快速发展,基于深度学习的目标追踪方法逐渐展现出强大的性能。其中,YOLOv9&…

深入浅出:探究过完备字典矩阵

在数学和信号处理的世界里,我们总是在寻找表达数据的最佳方式。在这篇博文中,我们将探讨一种特殊的矩阵——过完备字典矩阵,这是线性代数和信号处理中一个非常有趣且实用的概念。 什么是过完备字典矩阵? 首先,我们先…

Github 2024-02-24 开源项目日报Top10

根据Github Trendings的统计,今日(2024-02-24统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目5TypeScript项目2C项目1Rust项目1JavaScript项目1HTML项目1Jupyter Notebook项目1 Python - 100天…

【黑马程序员】2、TypeScript介绍_黑马程序员前端TypeScript教程,TypeScript零基础入门到实战全套教程

课程地址:【黑马程序员前端TypeScript教程,TypeScript零基础入门到实战全套教程】 https://www.bilibili.com/video/BV14Z4y1u7pi/?share_sourcecopy_web&vd_sourceb1cb921b73fe3808550eaf2224d1c155 目录 2、TypeScript初体验 2.1 安装编译TS的工…

C# WPF 桌面应用程序使用 SQlite 数据库

我们在开发 WPF 桌面应用程序时,数据库存的使用是必不可少的,除非你的应用没有数据存储的需求,有了数据存储需求,我们就会面临使用什么样的数据库的选择问题,我的选择方案是,单机版的应用我优先选择 Sqlite…

Spring篇----第五篇

系列文章目录 文章目录 系列文章目录前言一、Spring IoC 的实现机制。二、什么是 spring bean?三、spring 提供了哪些配置方式?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享…

手写redux和applyMiddleware中间件react示例

目录 一 核心代码 1.reducer 2.store.js 二 关于context API的使用 1. MyContext 2. createContext 3. ContextProvider 4. connect 三 组件验证效果 1. Todo 2. TodoList 3.TodoItem 4.TodoInput 5. App组件引入Todo组件 一 核心代码 1.reducer // 新增列表数…

springboot197基于springboot的毕业设计系统的开发

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的毕业设计系统的开发 适用于计算机类毕业设计,课程设计参考与学习用途。仅供学习参考, 不得用于商业或者非法用途,否则,一切后果请用户自负。 看运行截图看 第五章 第四章 …

餐饮管理系统的设计与实现

餐饮管理系统的设计与实现 获取源码——》公主号:计算机专业毕设大全

金融知识分享系列之:五日线

金融知识分享系列之:五日线 一、股票均线二、五日线三、五日线加量能三、五日线案例四、五日线案例五、五日线案例六、五日线案例七、五日线案例八、五日线案例 一、股票均线 股票均线是一种用于平滑股票价格的指标。它是根据一段时间内的股票价格计算得出的平均值…

只需三步即可更改centos7系统语言,centos7系统语言更换,centos7系统中文互换

只需三步即可更改centos7系统语言,centos7系统语言更换,centos7系统中文互换 操作系统:centOS7.8 64位 ssh登录工具:FinalShell FinalShell可以点此下载 先查看系统的默认语言 locale #zh_CN 中文如何验证是中文,可以使用umtui来验证 umtui是一款…

5 buuctf解题

命令执行 [BJDCTF2020]EasySearch1 打开题目 尝试弱口令&#xff0c;发现没有用 扫描一下后台&#xff0c;最后用御剑扫描到了index.php.swp 访问一下得到源码 源码如下 <?phpob_start();function get_hash(){$chars ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstu…

浅析Linux设备驱动:DMA内存映射

文章目录 概述DMA与Cache一致性DMA映射类型一致性DMA映射dma_alloc_coherent 流式DMA映射dma_map_single数据同步操作dma_direct_sync_single_for_cpudma_direct_sync_single_for_device 相关参考 概述 现代计算机系统中&#xff0c;CPU访问内存需要经过Cache&#xff0c;但外…

Javaweb之SpringBootWeb案例之配置优先级的详细解析

1. 配置优先级 在我们前面的课程当中&#xff0c;我们已经讲解了SpringBoot项目当中支持的三类配置文件&#xff1a; application.properties application.yml application.yaml 在SpringBoot项目当中&#xff0c;我们要想配置一个属性&#xff0c;可以通过这三种方式当中…

Android LinearLayout 如何让子元素靠下居中对齐 center bottom

Android LinearLayout 如何让子元素靠下居中对齐 center bottom 首先你需要知道两个知识点&#xff1a; android:layout_gravity 指定的是当前元素在父元素中的位置android:gravity 指定的是当前元素子元素的排布位置 比如&#xff1a; 有这么一个布局&#xff0c;我需要让…

IDEA创建java项目

1. 创建单个项目 1.1 点击New Project 刚安装好会进入下面的创建页面&#xff0c;选择直接New Project创建新项目。 如果后续打开IDEA&#xff0c;并且上次的项目存在&#xff0c;则会打默认开上次的项目&#xff0c;此时可以选择File -> New->Project创建新项目。 …

《TCP/IP详解 卷一》第4章 地址解析协议ARP

目录 4.1 引言 4.2 一个例子 4.3 ARP缓存 4.4 ARP帧格式 4.5 ARP例子 4.6 ARP缓存超时 4.7 代理ARP 4.8 免费ARP和地址冲突检测 4.9 ARP命令 4.10 使用ARP设置嵌入式设备IPv4地址 4.11 与ARP相关攻击 4.12 总结 4.1 引言 地址解析&#xff1a; IPv4&#xff1a;AR…

fpga_RGB模型与硬件加速思维

一 RGB模型 人眼之所以可以看到各种颜色的光&#xff0c;主要是红绿蓝三种感光细胞综合感觉的结果&#xff0c;而红绿蓝三色被称为三原色。 饱和度均为100%的RGB能组合成8种颜色&#xff0c;计算机处理的BMP图片为24bit的位图&#xff0c;即每一通道的颜色可以组合为2的8次方&a…

什么是智慧公厕?智慧公厕改善城市环境,提升居民生活质量

智慧公厕是指通过信息化、数字化和智慧化技术手段&#xff0c;对公共厕所进行高效管理和服务。它利用先进的科技手段&#xff0c;提升城市环境、改善居民生活质量&#xff0c;成为现代城市建设的重要组成部分。下面将以智慧公厕源头厂家广州中期科技有限公司&#xff0c;大量精…