jdk api之WriteAbortedException基础、应用、实战

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

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

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

1.78 WriteAbortedException

基本概念

WriteAbortedException表示序列化过程中的写入中止异常,通常与对象序列化和反序列化有关。

属性:
  1. detail:包含有关异常的详细信息。

  2. rootCause:如果此异常是由于另一个异常引起的,则存储引起写入中止的根本原因。

构造方法:
  1. WriteAbortedException(String s, Throwable ex):使用指定的详细信息和原因构造一个WriteAbortedException对象。

变量:
  1. private static final long serialVersionUID:用于版本控制,确保序列化和反序列化过程中类的兼容性。

方法:
  1. public Throwable getCause():返回此异常的根本原因。

  2. public String getMessage():返回此异常的详细信息。

  3. public void printStackTrace():打印异常及其跟踪信息。

这些是WriteAbortedException类的基本属性和方法。在处理对象序列化和反序列化时,如果发生写入中止的情况,将会抛出此异常。

应用场景

以下是WriteAbortedException的几种可能的应用场景以及相应的代码实现:

1. 应用场景:通过网络传输对象

在网络通信中,将对象序列化后通过网络传输,如果传输过程中发生错误,可能会导致写入中止异常。

javaCopy code
import java.io.*;
import java.net.Socket;
​
public class NetworkCommunicationExample {public static void main(String[] args) {try {Socket socket = new Socket("localhost", 8080);ObjectOutputStream outputStream = new ObjectOutputStream(socket.getOutputStream());// 序列化并发送对象outputStream.writeObject(new MyObject());outputStream.flush();outputStream.close();socket.close();} catch (IOException e) {e.printStackTrace();}}
}
2. 应用场景:持久化对象到文件

将对象序列化后存储到文件中,在写入文件时可能发生写入中止异常。

javaCopy code
import java.io.*;
​
public class FilePersistenceExample {public static void main(String[] args) {try {ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream("object.ser"));// 序列化对象并写入文件outputStream.writeObject(new MyObject());outputStream.close();} catch (IOException e) {e.printStackTrace();}}
}
3. 应用场景:对象缓存

将对象序列化后存储在内存中或者缓存中,如果写入过程中发生异常可能会抛出WriteAbortedException。

javaCopy code
import java.io.*;
import java.util.HashMap;
import java.util.Map;
​
public class ObjectCacheExample {private static final Map<String, byte[]> cache = new HashMap<>();
​public static void main(String[] args) {try {// 序列化对象并缓存cacheObject("key1", new MyObject());// 反序列化对象并从缓存中获取MyObject obj = (MyObject) getObject("key1");} catch (IOException | ClassNotFoundException e) {e.printStackTrace();}}
​private static void cacheObject(String key, Serializable obj) throws IOException {ByteArrayOutputStream bos = new ByteArrayOutputStream();ObjectOutputStream oos = new ObjectOutputStream(bos);oos.writeObject(obj);oos.close();cache.put(key, bos.toByteArray());}
​private static Object getObject(String key) throws IOException, ClassNotFoundException {byte[] bytes = cache.get(key);ByteArrayInputStream bis = new ByteArrayInputStream(bytes);ObjectInputStream ois = new ObjectInputStream(bis);return ois.readObject();}
}

在这些场景中,如果在对象序列化或反序列化的过程中发生写入中止的异常,可能会抛出WriteAbortedException。

实战例子

下面是一个项目实战例子,涉及将对象序列化后存储到文件中,并在需要时进行反序列化。在这个示例中,我们创建一个简单的学生管理系统,可以将学生对象存储到文件中,并从文件中检索学生信息。

javaCopy code
import java.io.*;
import java.util.ArrayList;
import java.util.List;
​
// 学生类
class Student implements Serializable {private String name;private int age;private String id;
​public Student(String name, int age, String id) {this.name = name;this.age = age;this.id = id;}
​@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +", id='" + id + '\'' +'}';}
}
​
// 学生管理系统
class StudentManagementSystem {private List<Student> students;private String fileName;
​public StudentManagementSystem(String fileName) {this.fileName = fileName;this.students = new ArrayList<>();}
​// 添加学生public void addStudent(Student student) {students.add(student);}
​// 保存学生信息到文件public void saveStudentsToFile() {try (ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream(fileName))) {outputStream.writeObject(students);System.out.println("学生信息已保存到文件");} catch (IOException e) {e.printStackTrace();}}
​// 从文件加载学生信息public void loadStudentsFromFile() {try (ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream(fileName))) {students = (List<Student>) inputStream.readObject();System.out.println("从文件加载学生信息成功");} catch (IOException | ClassNotFoundException e) {e.printStackTrace();}}
​// 显示所有学生信息public void displayStudents() {System.out.println("学生信息:");for (Student student : students) {System.out.println(student);}}
}
​
public class Main {public static void main(String[] args) {StudentManagementSystem system = new StudentManagementSystem("students.ser");
​// 添加学生信息system.addStudent(new Student("Alice", 20, "1001"));system.addStudent(new Student("Bob", 21, "1002"));system.addStudent(new Student("Charlie", 22, "1003"));
​// 保存学生信息到文件system.saveStudentsToFile();
​// 清空内存中的学生信息system = null;
​// 重新加载学生信息StudentManagementSystem newSystem = new StudentManagementSystem("students.ser");newSystem.loadStudentsFromFile();
​// 显示学生信息newSystem.displayStudents();}
}

在这个项目中,我们创建了一个Student类表示学生信息,然后创建了一个StudentManagementSystem类来管理学生信息。StudentManagementSystem类提供了方法来添加学生、将学生信息保存到文件、从文件加载学生信息以及显示学生信息。通过序列化和反序列化,我们能够将学生信息存储到文件中,并在需要时重新加载。

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

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

相关文章

WPF中通过自定义Panel实现控件拖动

背景 看到趋时软件的公众号文章&#xff08;WPF自定义Panel&#xff1a;让拖拽变得更简单&#xff09;&#xff0c;发现可以不通过Drag的方法来实现ListBox控件的拖动&#xff0c;而是通过对控件的坐标相加减去实现控件的位移等判断&#xff0c;因此根据文章里面的代码,边理解边…

Day80:服务攻防-中间件安全HW2023-WPS分析WeblogicJettyJenkinsCVE

目录 中间件-Jetty-CVE&信息泄漏 CVE-2021-34429(信息泄露) CVE-2021-28169(信息泄露) 中间件-Jenkins-CVE&RCE执行 cve_2017_1000353 CVE-2018-1000861 cve_2019_1003000 中间件-Weblogic-CVE&反序列化&RCE 应用金山WPS-HW2023-RCE&复现&上线…

代码随想录第30天|51. N皇后

51. N皇后 51. N 皇后 - 力扣&#xff08;LeetCode&#xff09; 代码随想录 (programmercarl.com) 这就是传说中的N皇后&#xff1f; 回溯算法安排&#xff01;| LeetCode&#xff1a;51.N皇后_哔哩哔哩_bilibili 按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行…

element-ui empty 组件源码分享

今日简单分享 empty 组件的源码实现&#xff0c;主要从以下三个方面&#xff1a; 1、empty 组件页面结构 2、empty 组件属性 3、empty 组件 slot 一、empty 组件页面结构 二、empty 组件属性 2.1 image 属性&#xff0c;图片地址&#xff0c;类型 string&#xff0c;无默认…

notepad++主题One Dark

<?xml version"1.0" encoding"Windows-1252" ?> <!--// # Style Name: One Dark for Notepad (Npp-1-Dark) # Author: https://60ss.github.io # Description: A close replica of the Atom "One Dark" syntax theme in Notepad. # L…

代码随想录阅读笔记-二叉树【二叉搜索树中的搜索】

题目 给定二叉搜索树&#xff08;BST&#xff09;的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在&#xff0c;则返回 NULL。 例如&#xff0c; 在上述示例中&#xff0c;如果要找的值是 5&#xff0c;但因为没有节点…

禁用@RabbitAutoConfiguration后 @RabbitListener注解失效

最近遇到一个问题,我的@RabbitListener注解失效了,原因是底层组件原因 @SpringBootApplication(exclude = org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration.class)在排除掉自动配置之后,在代码里声明queue和exchange其实是不会自动被创建的,需要自己…

【放假第1天】采购季倒计时 2G 50/年,4G 618/3年 云服务器选购攻略 阿里云 腾讯云 京东云对比 搭建网站、数据分析

更新日期&#xff1a;4月4日&#xff08;阿里云价格回调&#xff0c;京东云采购季持续进行&#xff09; 本文纯原创&#xff0c;侵权必究 【云服务器推荐】价格对比&#xff01;阿里云 京东云 腾讯云 选购指南视频截图 《最新对比表》已更新在文章头部—腾讯云文档&#xff…

Matlab学习书籍分享

一、什么是Matlab​​&#xff1f; Matlab是一种用于数值计算、科学计算、工程设计和数据分析的高级编程语言。它提供了丰富的数学函数库&#xff0c;支持矩阵运算、信号处理、图像处理、机器学习等多种应用领域。Matlab还具有强大的图形界面&#xff0c;可以方便地进行数据可…

突破编程_C++_查找算法(红黑树查找)

1 算法题 &#xff1a;使用红黑树的数据结构在无序数组中查找指定元素 1.1 题目含义 这个题目要求实现一个红黑树&#xff08;Red-Black Tree&#xff09;&#xff0c;这是一种自平衡的二叉查找树&#xff0c;它通过颜色和一系列的调整规则来确保树的大致平衡&#xff0c;从而…

uni-app 实现仿微信界面【我的+首页聊天列表+长按菜单功能+添加菜单功能】+ 附源码

目录 【微信首页聊天列表】界面 【我的】界面 源代码&#xff1a; 文后附完整代码&#xff0c;支持一键导入 HBuilderX 示例体验 【微信首页聊天列表】界面 仿造【微信首页聊天列表 长按菜单功能 右上角添加按钮弹窗功能】&#xff0c;使用 uni-app 开发&#xff0c; 一…

深入浅出 -- 系统架构之微服务架构选型参考图

技术选型架构图 是一个用于展示项目中所采用的各种技术和组件之间关系的图表。 它通常包括以下几个部分&#xff1a; 1. 项目名称和描述&#xff1a;简要介绍项目的背景和目标。 2. 技术栈&#xff1a;列出项目中使用的主要技术和工具&#xff0c;如编程语言、框架、数据库…

[xboard]real6410-5.2 移植kernel网络驱动

文章目录 硬件电路 核心板,使用DM9000A [图片] 软件配置 问题1 / # / # ifconfig ifconfig: /proc/net/dev: No such file or directory ifconfig: socket: Function not implemented 参考https://blog.csdn.net/u011011827/article/details/115479707 问题2 / # ifconfig i…

Spring Boot程序中@JsonIgnoreProperties与@JsonIgnore的基本使用

问题由来&#xff1a; springboot项目中定义了很多类&#xff0c;我们在rest返回中直接返回或者在返回对象中使用这些类&#xff0c;spring已经使用jackson自动帮我们完成这些的to json。但是有时候自动转的json内容太多&#xff0c;或者格式不符合我们的期望&#xff0c;因此需…

JVM专题——类文件加载

本文部分内容节选自Java Guide和《深入理解Java虚拟机》, Java Guide地址: https://javaguide.cn/java/jvm/class-loading-process.html &#x1f680; 基础&#xff08;上&#xff09; → &#x1f680; 基础&#xff08;中&#xff09; → &#x1f680;基础&#xff08;下&a…

(免费分享)基于springboot,vue房屋租赁管理系统

功能说明&#xff1a; * 普通用户角色&#xff1a; 1. 寻找房源功能--提供了两种寻找房源的功能&#xff0c;一种是普通用户在平台上搜索、筛选主动寻找房源的功能&#xff0c;另一种是用户填写征集房源的条件&#xff0c;系统会持续将最新符合条件的房源推送给用户。 2. …

《Effective C++》《构造/析构/赋值运算——11、在operator=中处理“自我赋值”》

文章目录 1、Terms11:Handle assignment to self in operator类中自我赋值问题及如何解决自我赋值问题解决&#xff1a;异常处理问题解决使用“copy and swap”技术来处理自我赋值 2、面试相关2.1 什么是自我赋值&#xff1f;为什么它是个问题&#xff1f;2.2 在重载赋值操作符…

Vuex的模块化管理

1&#xff1a;定义一个单独的模块。由于mutation的第二个参数只能提交一个对象&#xff0c;所以这里的ThisLog是个json串。 2&#xff1a;在Vuex中的index.js中引入该模块 3&#xff1a;在别的组件中通过...mapState调用模块保存的State的值。 4&#xff1a;用...mapMutations修…

【番外篇2】统计学-方差分析

方差分析 方差分析&#xff08;ANOVA&#xff09;是一种用于比较三个或三个以上组之间平均值是否有显著差异的统计方法。通俗地说&#xff0c;就是用来确定不同组之间的平均值是否有显著差异。 让我们通过一个简单的例子来解释方差分析&#xff1a; 假设你是一位教育工作者&a…

界面控件Kendo UI for jQuery 2024 Q1亮点 - 新的ToggleButton组件

Telerik & Kendo UI 2024 Q1 版本于2024年初发布&#xff0c;在此版本中将AI集成到了UI组件中&#xff0c;在整个产品组合中引入AI Prompt组件以及10多个新的UI控件、支持Angular 17、多个数据可视化功能增强等。 P.S&#xff1a;Kendo UI for jQuery提供了在短时间内构建…