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

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

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

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

一、java.io

1.38 NotSerializableException

NotSerializableException 是 Java 中的异常类,它属于 java.io 包。当试图对一个非序列化的对象进行序列化时,或者在序列化或反序列化过程中涉及不可序列化的对象时,可能会抛出这个异常。

以下是 NotSerializableException 的基本介绍:

NotSerializableException 介绍:
所有字段:
  • private static final long serialVersionUID:序列化版本 ID。

构造方法:
  • NotSerializableException() 创建一个新的 NotSerializableException 对象,其中没有详细消息。

  • NotSerializableException(String s) 使用指定的详细消息创建一个新的 NotSerializableException 对象。

方法摘要:
  • 无特定的方法,继承自父类。

简单使用例子:

以下是一个简单的例子,演示了在试图序列化一个非序列化的对象时可能会抛出 NotSerializableException

javaCopy code
import java.io.*;
​
public class NotSerializableExceptionExample {
​public static void main(String[] args) {try (ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream("data.bin"))) {
​// 尝试序列化一个非序列化的对象,抛出 NotSerializableExceptionNonSerializableObject nonSerializableObject = new NonSerializableObject();outputStream.writeObject(nonSerializableObject);
​} catch (IOException e) {if (e instanceof NotSerializableException) {System.err.println("NotSerializableException: Object is not serializable.");} else {e.printStackTrace();}}}
​static class NonSerializableObject {private String data;
​public NonSerializableObject() {this.data = "This object is not serializable.";}}
}

在这个例子中,我们创建了一个 NonSerializableObject 类,该类没有实现 Serializable 接口。然后,我们尝试使用 ObjectOutputStream 对这个非序列化的对象进行序列化,这时会抛出 NotSerializableException。在实际项目中,确保需要序列化的对象实现 Serializable 接口是非常重要的。

应用场景

NotSerializableException 的主要应用场景是在序列化或反序列化过程中,当试图对一个非序列化的对象进行序列化时,或者涉及不可序列化的对象时,抛出这个异常。以下是一些可能的应用场景及相应的代码实现:

应用场景 1: 序列化过程中抛出 NotSerializableException
javaCopy code
import java.io.*;
​
public class NotSerializableExceptionExample {
​public static void main(String[] args) {try (ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream("data.bin"))) {
​// 尝试序列化一个非序列化的对象,抛出 NotSerializableExceptionNonSerializableObject nonSerializableObject = new NonSerializableObject();outputStream.writeObject(nonSerializableObject);
​} catch (IOException e) {if (e instanceof NotSerializableException) {System.err.println("NotSerializableException: Object is not serializable.");} else {e.printStackTrace();}}}
​static class NonSerializableObject {private String data;
​public NonSerializableObject() {this.data = "This object is not serializable.";}}
}

在这个例子中,NonSerializableObject 类没有实现 Serializable 接口,因此尝试对其进行序列化时会抛出 NotSerializableException

应用场景 2: 处理反序列化时的 NotSerializableException
javaCopy code
import java.io.*;
​
public class NotSerializableExceptionDeserializationExample {
​public static void main(String[] args) {String fileName = "data.bin";
​// 模拟从文件加载对象loadObjectFromFile(fileName);}
​private static void loadObjectFromFile(String fileName) {try (ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream(fileName))) {try {// 尝试反序列化对象,处理可能的 NotSerializableExceptionObject object = inputStream.readObject();System.out.println("Deserialization successful: " + object);} catch (ClassNotFoundException | NotSerializableException e) {if (e instanceof NotSerializableException) {System.err.println("NotSerializableException: Object is not serializable during deserialization.");} else {e.printStackTrace();}}} catch (IOException e) {e.printStackTrace();}}
}

在这个例子中,loadObjectFromFile 方法尝试从文件中加载对象,如果文件包含不可序列化的对象,则会抛出 NotSerializableException。在实际项目中,处理这种异常通常需要更复杂的逻辑,例如记录日志或提供用户友好的错误消息。

请注意,确保需要序列化的对象实现 Serializable 接口是预防 NotSerializableException 的一种有效方式。

实战例子

在实际项目中,NotSerializableException 主要涉及到对象的序列化和反序列化操作。以下是一个简单的项目实战例子,演示了在保存和加载用户数据时可能会遇到 NotSerializableException 的情况:

项目实战例子:保存和加载用户数据

假设你的项目需要保存和加载用户数据,你可能会创建一个 User 类来表示用户信息。在保存用户数据时,如果某些字段不可序列化,可能会引发 NotSerializableException。以下是一个示例:

javaCopy code
import java.io.*;
​
public class UserSerializationProject {
​public static void main(String[] args) {String fileName = "users.ser";
​// 模拟保存用户数据到文件saveUsersToFile(fileName);
​// 模拟从文件加载用户数据loadUsersFromFile(fileName);}
​private static void saveUsersToFile(String fileName) {try (ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream(fileName))) {User user1 = new User("John", 25);User user2 = new User("Alice", 30);
​outputStream.writeObject(user1);outputStream.writeObject(user2);
​System.out.println("Users saved to file successfully.");} catch (IOException e) {if (e instanceof NotSerializableException) {System.err.println("NotSerializableException: Object is not serializable.");} else {e.printStackTrace();}}}
​private static void loadUsersFromFile(String fileName) {try (ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream(fileName))) {try {while (true) {User user = (User) inputStream.readObject();System.out.println("Loaded user: " + user);}} catch (ClassNotFoundException | NotSerializableException e) {if (e instanceof NotSerializableException) {System.err.println("NotSerializableException: Object is not serializable during deserialization.");} else {e.printStackTrace();}}} catch (IOException e) {if (e instanceof EOFException) {System.out.println("End of file reached.");} else {e.printStackTrace();}}}
​static class User implements Serializable {private String name;private transient int age; // transient 关键字标记 age 字段不参与序列化
​public User(String name, int age) {this.name = name;this.age = age;}
​@Overridepublic String toString() {return "User{" +"name='" + name + '\'' +", age=" + age +'}';}}
}

在这个例子中,User 类实现了 Serializable 接口,但 age 字段被标记为 transient,表示该字段不参与序列化。当我们尝试保存 User 对象到文件时,NotSerializableException 不会被抛出。然而,在加载用户数据时,由于 age 字段不可序列化,会触发 NotSerializableException

在实际项目中,你可能需要更复杂的数据处理逻辑以及更强大的异常处理机制,例如记录日志或提供用户友好的错误信息。

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

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

相关文章

【动态规划】【记忆化搜索】【回文】1312让字符串成为回文串的最少插入次数

作者推荐 【动态规划】【字符串】【表达式】2019. 解出数学表达式的学生分数 本文涉及知识点 动态规划汇总 记忆化搜索 回文 字符串 LeetCode1312. 让字符串成为回文串的最少插入次数 给你一个字符串 s ,每一次操作你都可以在字符串的任意位置插入任意字符。 请…

基于Java SSM框架实现校园快领服务系统项目【项目源码+论文说明】

基于java的SSM框架实现校园快领服务系统演示 摘要 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势;对于校园快领服务系统当然也不能排除在外,随着网络技术的不断成熟,带动了…

Python爬虫的基本原理

我们可以把互联网比作一张大网,而爬虫(即网络爬虫)便是在网上爬行的蜘蛛。把网的节点比作一个个网页,爬虫爬到这就相当于访问了该页面,获取了其信息。可以把节点间的连线比作网页与网页之间的链接关系,这样…

双非本科准备秋招(14.3)—— java线程

创建和运行线程 1、使用Thread Slf4j(topic "c.Test1")public class Test1 {public static void main(String[] args) {Thread t new Thread("t1") {Overridepublic void run() {log.debug("running");}};t.start();​log.debug("runnin…

Windows 共享文件 netlogon和sysvol的作用

在Windows域环境中&#xff0c;Netlogon和SYSVOL是两个非常重要的共享文件夹&#xff0c;它们由域控制器自动创建并管理&#xff0c;对于Active Directory&#xff08;AD&#xff09;域的正常运行至关重要&#xff1a; NETLOGON共享&#xff1a; 位置&#xff1a;\\<domain_…

牛客——扫雷MINE(dp,dfs,枚举+递推)

链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 来源&#xff1a;牛客网 题目描述 相信大家都玩过扫雷的游戏。那是在一个n*m的矩阵里面有一些雷&#xff0c;要你根据一些信息找出雷来。 万圣节到了 &#xff0c;“余”人国流行起了一种简单的扫雷游戏&#xff0c;…

【BIAI】Lecture 9-Motor system 1

Motor System 专业词汇 skeletal muscle 骨骼肌 smooth muscle 平滑肌 cardiac muscle 心肌 flexor reflex 屈曲反射 central pattern generators 中央模式生成器 bio-inspired bipedal robots 仿生双足机器人 myotatic stretch reflex 肌肉自伸展反射 Cortex optic nerve 视皮…

web wifi配网和模式切换-esp8266和esp32

web wifi配网和模式切换-esp8266和esp32 支持模式:1:tcp client() 2:tcp server 3:http server(POST/GET) 4:http client 5:udp,6:factory,7:mqtt 配网进入方式&#xff1a; 开机&#xff0c;指示灯亮起后(需要灯闪烁3下后)&#xff0c;需在3s内&#xff08;超过3s则会正常启动…

NUXTJS安装始终报错无法正常运行问题解决

近日在了解NuxtJS&#xff0c;按照官方给出方法进行安装后&#xff0c;不是报错&#xff0c;就是安装成功后运行不了。执行npm run dev后始终运行出错&#xff0c;判断肯定是对应版本问题&#xff0c;沿着这方向研究&#xff0c;最终运行成功了。 文档地址&#xff1a;安装 - …

WordPress可以做企业官网吗?如何用wordpress建公司网站?

我们在国内看到很多个人博客网站都是使用WordPress搭建&#xff0c;但是企业官网的相对少一些&#xff0c;那么WordPress可以做企业官网吗&#xff1f;如何用wordpress建公司网站呢&#xff1f;下面boke112百科就跟大家简单说一下。 WordPress是一款免费开源的内容管理系统&am…

python爬虫4

#1.练习 # &#xff08;1&#xff09; 获取网页的源码 # &#xff08;2&#xff09; 解析 解析的服务器响应的文件 etree.HTML # (3) 打印 import urllib.request urlhttps://www.baidu.com/ headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit…

RabbitMQ介绍及简单操作

文章目录 一、同步调用二、异步调用三、MQ介绍1.安装RabbitMQ2.介绍RabbitMQ3.页面简单使用 一、同步调用 例如&#xff1a; #mermaid-svg-DMjF9XQ1VKYd5FjK {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-DMjF9XQ…

[Angular 基础] - Angular 渲染过程 组件的创建

[Angular 基础] - Angular 渲染过程 & 组件的创建 之前的笔记为了推进度写的太笼统了&#xff08;只有功能没有其他&#xff09;&#xff0c;当时学的时候知道是什么东西&#xff0c;但是学完后重新复习发现有些内容就记不清了&#xff0c;所以重新用自己的语言总结一下 …

Aigtek超声功率放大器的作用是什么

超声功率放大器是一种用于放大超声信号的设备&#xff0c;其作用是增强超声信号的功率&#xff0c;使其能够在超声应用中达到所需的强度和能量。下面西安安泰将详细解释超声功率放大器的作用以及其在不同领域的应用。 超声技术是通过利用超声波的高频振动传递和检测能量&#x…

springboot在线问诊系统-计算机毕业设计源码00211

摘 要 针对医院门诊等问题&#xff0c;对在线问诊进行研究分析&#xff0c;然后开发设计出在线问诊系统以解决问题。在线问诊系统主要功能模块包括首页、轮播图管理、公告信息管理、资源管理、系统用户管理&#xff08;管理员、患者用户、医生用户&#xff09;、模块管理&#…

MongoDB从入门到实战之MongoDB快速入门

前言 上一章节主要概述了MongoDB的优劣势、应用场景和发展史。这一章节将快速的概述一下MongoDB的基本概念&#xff0c;带领大家快速入门MongoDB这个文档型的NoSQL数据库。 MongoDB从入门到实战的相关教程 MongoDB从入门到实战之MongoDB简介&#x1f449; MongoDB从入门到实战…

go_view同后端集成时的注意事项

goview是一个不错的可视化大屏配置工具;提供了丰富的功能可供调用。 官方地址和文档: https://gitee.com/dromara/go-view https://www.mtruning.club/guide/start/ 同nodejs集成可参考;https://gitee.com/qwdingyu/led (建议–后端集成有api功能,可直接配置sql)同dotne…

力扣面试题 17.11. 单词距离(双指针)

Problem: 面试题 17.11. 单词距离 文章目录 题目描述思路复杂度Code 题目描述 思路 Problem力扣面试题 16.06. 最小差 该题目只需预先做一些处理&#xff0c;即可以转换为上述题目&#xff1a; 1.预处理操作&#xff1a;定义两个数组w1ps&#xff0c;w2ps用于记录在words数组中…

【ARM Coresight 系列文章 8.1 - ARM Coresight 通过 APBIC arbiter】

请阅读【ARM Coresight SoC-400/SoC-600 专栏导读】 文章目录 APBIC arbiter仲裁使用举例APBIC arbiter 在 SoC-600中,APBIC 是用来为 APB4 master 和 APB4 slave 提供 连接关系的组件。APB 是一种简单的总线协议,通常用于低带宽或低性能外设,如定时器、接口控制等。APBIC …

查找二叉树结点C++,数组模拟二叉树

已知一棵二叉树用邻接表结构存储&#xff0c;中序查找二叉树中权值为 x 的结点&#xff0c;并指出该结点在中序遍历中的排列位置。 例&#xff1a;如图二叉树的数据文件的数据格式如下: 输入格式 第一行包含整数 n&#xff0c;表示二叉树的结点数&#xff0c;结点编号从 1 到…