序列化定义以及使用和注意事项
什么是序列化和反序列化
序列化:是将对象转换为可传输或存储的过程,
反序列化:通常是将字节流或是其他数据格式或源数据转为对象的过程。
序列化的作用
- 对象的持久化:将对象的状态保存到磁盘或数据库中,以便在程序重新启动时恢复对象。
- 对象的传输:通过网络或其他通信方式将对象发送到远程系统,实现分布式系统的通信。
- 对象的缓存:将对象序列化后存储在缓存中,可以提高读取和响应速度。
总结来说序列化后可以传输,持久化保存到文件或系统缓存中进行交互。
java序列化转成字节流的好处
跨平台兼容以及方便传输和持久化存储: 字节流是一种通用的数据表示方式,可以在不同平台客户端,服务器之间传输或磁盘上或在数据库中存储
占用空间小和隐私安全: 字节流更紧凑,并且不直接暴露对象的内部结构和属性,占用更少的存储空间。
总结将对象序列化为字节流跨平台兼容以及方便传输,紧凑占用空间小和隐私更安全。
java中序列化的实现
类实现 Serializable 接口,
Serializable 接口没有任何方法,只是一个标记接口是一个约定和规范,是为了表明一个类可以被序列化会把对象转换为字节流,具体序列化过程就是通过流将对象写入流 在读出来
import java.io.Serializable;public class MyClass implements Serializable {// 类的成员变量和方法
}
类实现 Externalizable 接口
需要实现 writeExternal 和 readExternal 方法,以提供更高度的自定义序列化和反序列化过程
import java.io.Externalizable;
import java.io.ObjectInput;
import java.io.ObjectOutput;public class MyExternalizableClass implements Externalizable {@Overridepublic void writeExternal(ObjectOutput out) {// 自定义序列化逻辑}@Overridepublic void readExternal(ObjectInput in) {// 自定义反序列化逻辑}
}
将对象转为JSON格式或是解析JSON数据转为对象
// 通过jdk的ObjectMapper将对象转为json
AllPerson person = new AllPerson();
ObjectMapper objectMapper = new ObjectMapper();
String jsonString = objectMapper.writeValueAsString(person);// 还可以通过alibaba的fastjson或是hutoll的json工具
关于序列化注意的问题
定义serialVersionUID有什么用
serialVersionUID是一个用于版本控制的静态变量,用于确保在对象序列化和反序列化过程中,类的版本一致性
transient修饰成员变量不被序列化
如果在一个序列化的类中一些成员变量不需要或不能被序列化可以使用关键字transient修饰
NotSerializableException
如果一个类没有实现Serializable接口 但是在用流将类序列化时就会报错
关于JSON序列化的理解
将对象解析成JSon格式就是序列化的过程,将JSON数据解析为对象就是反序列化的过程,因为JSON也是一种通用的跨平台的格式
演示了如何将一个实现了 Serializable 接口的对象序列化成字节流,并在反序列化时还原对象
import java.io.*;public class SerializationExample {public static void main(String[] args) {// 创建一个实现了 Serializable 接口的对象MyClass myObject = new MyClass("Hello, Serialization!");// 将对象序列化为字节流try (FileOutputStream fileOut = new FileOutputStream("myobject.ser");ObjectOutputStream out = new ObjectOutputStream(fileOut)) {out.writeObject(myObject);} catch (IOException e) {e.printStackTrace();}// 从字节流中反序列化对象try (FileInputStream fileIn = new FileInputStream("myobject.ser");ObjectInputStream in = new ObjectInputStream(fileIn)) {MyClass restoredObject = (MyClass) in.readObject();System.out.println(restoredObject.getMessage()); // 输出: Hello, Serialization!} catch (IOException | ClassNotFoundException e) {e.printStackTrace();}}
}class MyClass implements Serializable {private String message;public MyClass(String message) {this.message = message;}public String getMessage() {return message;}
}
相关文章:
序列化定义以及使用和注意事项
什么是序列化和反序列化 序列化:是将对象转换为可传输或存储的过程, 反序列化:通常是将字节流或是其他数据格式或源数据转为对象的过程。 序列化的作用 对象的持久化:将对象的状态保存到磁盘或数据库中,以便在程序…...

吴恩达机器学习COURSE1 WEEK3
COURSE1 WEEK3 逻辑回归 逻辑回归主要用于分类任务 只有两种输出结果的分类任务叫做二元分类,例如预测垃圾邮件,只能回答是或否 实际上,在逻辑回归中,我们要做的任务就类似于在数据集中画出一个这样的曲线,用来作为…...
白骑士的PyCharm教学高级篇 3.1 性能分析与优化
系列目录 上一篇:白骑士的PyCharm教学进阶篇 2.5 数据库连接与管理 在软件开发中,性能分析与优化是提高程序运行效率和用户体验的重要环节。PyCharm提供了强大的性能分析工具,帮助你识别和优化代码中的性能瓶颈。本文将详细介绍PyCharm中的代…...
swiper横向轮播(阶梯式滚动轮播)未生效
问题描述 版本问题 使用swiper4以上的版本可以解决该问题,4以上的swiper采用了this指向。...

基于arcpro3.0.2的北斗网格生成简介
基于arcpro3.0.2的北斗网格生成简介 采用2000坐标系、可基于行政区范围 软件可生成第一级到第十级北斗网格经纬跨度 等分 约赤道处距离 第一级 6X4度 60 和A~V 660 km 第二级 30X30分 12X8 …...
网络流算法:最大流问题
引言 最大流问题是网络流中的一个经典问题,其目标是在给定的流网络中找到从源点到汇点的最大流量。最大流问题在交通运输、计算机网络、供应链管理等领域有广泛的应用。本文将详细介绍最大流问题的定义、解决方法以及具体算法实现。 目录 最大流问题的定义Ford-F…...
C++从入门到入土(四)--日期类的实现
目录 前言 日期类的实现 日期的获取 日期的比较 const成员函数 日期的加减 日期的加等 日期的减等 日期的加减 日期的加加减减 日期的相减 流插入和提取的重载 友元 友元的特点 日期类代码 总结 前言 前面我们介绍了C中类和对象的相关知识和六个默认成员函数&…...

【香橙派系列教程】(七)香橙派下的Python3安装
【七】香橙派下的Python3安装 为接下来的Linux图像识别智能垃圾桶做准备。 图像处理使用京东SDK只支持pyhton和Java接口,目的是引入C语言的Python调用,感受大厂做的算法bug 此接口是人工智能接口,京东识别模型是通过训练后的模型,…...
贝叶斯优化算法(Bo)与门控循环单元(GRU)结合的预测模型(Bo-GRU)及其Python和MATLAB实现
### 背景 随着时间序列数据在各个领域(如金融、气象、医疗等)应用的日益广泛,如何准确地预测未来的数据点成为了一个重要的研究方向。长短期记忆网络(LSTM)和门控循环单元(GRU)作为深度学习模型…...

人工智能时代,程序员当如何保持核心竞争力?
目录 前言 一.AI辅助编程对程序员工作的影响 二.程序员应重点发展的核心能力 三.人机协作模式下的职业发展规划 结束语 前言 随着AIGC(如chatgpt、midjourney、claude等)大语言模型接二连三的涌现,AI辅助编程工具日益普及,程序…...

LMDrive 端到端闭环自动驾驶框架
LMDrive,一种新颖的语言引导的端到端闭环自动驾驶框架。LMDrive独特地处理和整合多模态传感器数据与自然语言指令,使车辆能够在现实的指令设置中与人类和导航软件进行交互。 LMDrive由两个主要部分组成: 1)一个视觉编码器&#x…...
P2045 方格取数加强版
Description 给定一个 n n n \times n nn 的矩阵,从左上角出发,可以往右或者往下走,每到达一个方格,就取走上面的数(取过后格子上的数会清零),一共要走 k k k 次,求取到的数之和…...
【Bigdata】OLAP的衡量标准
这是我父亲 日记里的文字 这是他的生命 留下留下来的散文诗 几十年后 我看着泪流不止 可我的父亲已经 老得像一个影子 🎵 许飞《父亲写的散文诗》 OLAP(联机分析处理)系统的衡量标准主要集中在以下几个方面:…...

关于DDOS攻击趋势及防护措施
随着互联网技术的飞速发展,网络安全问题日益成为企业不可忽视的重要议题。分布式拒绝服务(DDoS)攻击作为其中的典型代表,以其强大的破坏力和难以防范的特性,给企业的网络安全带来了巨大挑战。今天我们就来了解下当前DD…...
Apache Flink:一个开源流处理框架
文章目录 引言官网链接Flink 原理概述核心概念 基础使用环境搭建编写 Flink 程序注意事项 高级使用窗口操作状态后端复杂事件处理(CEP)与 Kafka 集成 优点结论 引言 Apache Flink 是一个开源流处理框架,专为高吞吐量、低延迟的实时数据处理设…...

Nginx 学习笔记
1. Nginx简介 Nginx 是一个高性能的Http和反向代理服务器。也是一个IMAP/POP3/SMTP等邮件代理服务器。 特点: 占有内存少并发能力强安装非常的简单配置文件非常简洁(还能够支持perl语法)Bug非常少启动特别容易,并且几乎可以做到…...

软甲测试定义和分类
软件测试定义 使用人工和自动手段来运行或测试某个系统的过程,其目的在于检验他是否满足规定的需求或弄清预期结果与实际结果之间的差别 软件测试目的 为了发现程序存在的代码或业务逻辑错误 – 第一优先级发现错误为了检验产品是否符合用户需求 – 跟用户要求实…...

Vue 3+Vite+Eectron从入门到实战系列之(二)一Elementplus及VueRouter的配置
为了后续开发方便,在没有 UI 设计师配合的情况下,让我们的界面更加美观,我们使用 elementplus 组件库,并配置路由。 删除不需要的默认文件夹及文件,src 配置如下 实现效果 安装 elementplus,vue-router npm install element-plus --save npm install vue-router --save在…...

STL-list
1.list 1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。 2. list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。 3. l…...
2024 7.29~8.4 周报
一、上周工作 2024 7.22~7.28周报-CSDN博客 二、本周计划 修改论文 三、完成情况 3.1 论文修改 3.1.1 摘要 问题:所写问题是一般性的深度网络问题(过拟合),并没有针对FWI的问题(边缘不清晰、深层不清晰、速度慢…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...

el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...