JAVA序列化和反序列化
JAVA序列化和反序列化
文章目录
- JAVA序列化和反序列化
- 序列化
- 什么是序列化?
- 为什么要进行序列化?
- 如何将对线进行序列化
- 具体实现过程
- 完整代码
序列化
什么是序列化?
就是将对象转化为字节的过程
为什么要进行序列化?
- 让数据更高效的传输
- 让数据更好的被存储
如何将对线进行序列化
对象要想进行序列化必须满足两个条件:
- 该类必须实现 java.io.Serializable 接口
- 该类的所有属性必须是可序列化的
具体实现过程
通过implements实现序列化接口:
import java.io.Serializable;public class student implements Serializable {public String name;public int course;public int age;public void behavior(){System.out.println("I am student");}
}
这样就允许该对象类被序列化,重写序列化函数
// 导入java.io.*包,这个包包含了Java IO的所有类和接口,提供了全面的输入/输出接口支持。
import java.io.*;// 定义一个名为Serialization_And_Unserialization的公共类。这个类将演示如何实现对象的序列化和反序列化。
public class Serialization_And_Unserialization {// 定义一个公共方法Serialize,它接受一个Object类型的对象和一个File类型的文件名作为参数。这个方法将对象序列化并写入到指定的文件中。 public void Serialize(Object obj,File filename) throws IOException {// 创建一个FileOutputStream对象,它将创建一个新的文件输出流,允许将字节写入到指定的文件中。 FileOutputStream FO = new FileOutputStream(filename); //新建一个文件输出流 将字节写入文件的输出流 // 创建一个ObjectOutputStream对象,它将创建一个新的对象输出流,用于将对象序列化并写入到之前创建的文件输出流中。 ObjectOutputStream OOS = new ObjectOutputStream(FO);// 使用ObjectOutputStream的writeObject方法将对象序列化并写入到文件输出流中。 OOS.writeObject(obj);}
}
使用我们上篇java基础文字写好的对象来进行测试
import java.io.File; // 导入文件类,用于创建文件对象
import java.io.IOException; // 导入IOException类,处理IO操作可能出现的异常 public class Xl { // 定义一个名为Xl的公共类 public static void main(String[] args) throws IOException, ClassNotFoundException { // 主方法,程序入口 student stu2 =new student(); // 创建一个名为stu2的学生对象 Serialization_And_Unserialization s =new Serialization_And_Unserialization(); // 创建一个Serialization_And_Unserialization对象,用于进行对象的序列化和反序列化操作 s.Serialize(stu2, new File("stu2.txt")); // 使用Serialize方法将stu2对象序列化并保存到名为stu2.txt的文件中 }
}
我们可以看到文件已经生成了

接下来再写一个方法将它进行反序列化
public Object Unserialize(String filename) throws IOException, ClassNotFoundException {// 创建一个FileInputStream对象,它将创建一个新的文件输入流,允许从指定的文件中读取字节。FileInputStream FI = new FileInputStream(filename);// 创建一个ObjectInputStream对象,它将创建一个新的对象输入流,用于从之前创建的文件输入流中读取并反序列化对象。ObjectInputStream OIS = new ObjectInputStream(FI);// 使用ObjectInputStream的readObject方法从文件输入流中读取并反序列化对象,然后返回这个对象。return OIS.readObject();}
我们进行调用
Object stu3=s.Unserialize("stu2.txt"); // 使用Unserialize方法从名为stu2.txt的文件中读取并反序列化对象,然后将其赋给stu3变量System.out.println(stu3); // 打印stu3对象

看到已经准换回来了
完整代码
重写方法代码
// 导入java.io.*包,这个包包含了Java IO的所有类和接口,提供了全面的输入/输出接口支持。
import java.io.*;// 定义一个名为Serialization_And_Unserialization的公共类。这个类将演示如何实现对象的序列化和反序列化。
public class Serialization_And_Unserialization {// 定义一个公共方法Serialize,它接受一个Object类型的对象和一个File类型的文件名作为参数。这个方法将对象序列化并写入到指定的文件中。 public void Serialize(Object obj,File filename) throws IOException {// 创建一个FileOutputStream对象,它将创建一个新的文件输出流,允许将字节写入到指定的文件中。 FileOutputStream FO = new FileOutputStream(filename); // 创建一个ObjectOutputStream对象,它将创建一个新的对象输出流,用于将对象序列化并写入到之前创建的文件输出流中。 ObjectOutputStream OOS = new ObjectOutputStream(FO);// 使用ObjectOutputStream的writeObject方法将对象序列化并写入到文件输出流中。 OOS.writeObject(obj);}// 定义一个公共方法Unserialize,它接受一个String类型的文件名作为参数。这个方法将从指定的文件中读取对象并将其反序列化。public Object Unserialize(String filename) throws IOException, ClassNotFoundException {// 创建一个FileInputStream对象,它将创建一个新的文件输入流,允许从指定的文件中读取字节。FileInputStream FI = new FileInputStream(filename);// 创建一个ObjectInputStream对象,它将创建一个新的对象输入流,用于从之前创建的文件输入流中读取并反序列化对象。ObjectInputStream OIS = new ObjectInputStream(FI);// 使用ObjectInputStream的readObject方法从文件输入流中读取并反序列化对象,然后返回这个对象。return OIS.readObject();}
}
调用代码
import java.io.File; // 导入文件类,用于创建文件对象
import java.io.IOException; // 导入IOException类,处理IO操作可能出现的异常public class Xl { // 定义一个名为Xl的公共类public static void main(String[] args) throws IOException, ClassNotFoundException { // 主方法,程序入口student stu2 =new student(); // 创建一个名为stu2的学生对象Serialization_And_Unserialization s =new Serialization_And_Unserialization(); // 创建一个Serialization_And_Unserialization对象,用于进行对象的序列化和反序列化操作s.Serialize(stu2, new File("stu2.txt")); // 使用Serialize方法将stu2对象序列化并保存到名为stu2.txt的文件中Object stu3=s.Unserialize("stu2.txt"); // 使用Unserialize方法从名为stu2.txt的文件中读取并反序列化对象,然后将其赋给stu3变量System.out.println(stu3); // 打印stu3对象}
}
相关文章:
JAVA序列化和反序列化
JAVA序列化和反序列化 文章目录 JAVA序列化和反序列化序列化什么是序列化?为什么要进行序列化?如何将对线进行序列化具体实现过程 完整代码 序列化 什么是序列化? 就是将对象转化为字节的过程 为什么要进行序列化? 让数据更高效的传输让数据更好的…...
基于浣熊算法优化概率神经网络PNN的分类预测 - 附代码
基于浣熊算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于浣熊算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于浣熊优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神经网络的光滑…...
uni-app打包后,打开软件时使其横屏显示
找到page.json文件,在global加入以下代码: 这样就可以横屏显示了。...
MYSQL基础知识之【创建,删除,选择数据库】
文章目录 前言MySQL 创建数据库使用 mysqladmin 创建数据库使用 PHP脚本 创建数据库 MySQL 删除数据库使用 mysqladmin 删除数据库使用PHP脚本删除数据库 MySQL 选择数据库从命令提示窗口中选择MySQL数据库使用PHP脚本选择MySQL数据库 后言 前言 hello world欢迎来到前端的新世…...
关于 token 和证书
关于 token 和证书 在网络检测中,Token通常是指一种特殊的令牌,用于在分布式系统中进行资源控制和访问管理。Token可以用于验证客户端的身份、限制客户端的访问权限以及控制客户端对某些资源的使用。 在网络检测中,Token通常用于以下几个方…...
基于SSM和微信小程序的场地预约网站
文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SSM和微信小程序的场地预约网站,jav…...
Javascript每天一道算法题(十七)——缺失的第一个正整数_困难
文章目录 前言1、问题2、示例3、解决方法(1)方法1 总结 前言 提示: 1、问题 给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 看了很久…...
【React】路径别名配置
路径解析配置(webpack),把 / 解析为 src/路径联想配置(VsCode),VSCode 在输入 / 时,自动联想出来对应的 src/下的子级目录 1. 路径解析配置 安装craco npm i -D craco/craco项目根目录下创建配…...
前缀和——238. 除自身以外数组的乘积
文章目录 🍷1. 题目🍸2. 算法原理🍥解法一:暴力求解🍥解法二:前缀和(积) 🍹3. 代码实现 🍷1. 题目 题目链接:238. 除自身以外数组的乘积 - 力扣&a…...
MySql数据库常用指令(二)
MySql数据库常用指令(二) 一、WHERE 子句二、UPDATE 更新三、DELETE 语句四、LIKE 子句五、UNION 操作符 注:文中TEST为测试所用数据库,根据实际应用修改 一、WHERE 子句 SELECT 语句使用 WHERE 子句从数据表中读取数据…...
zookeeper 单机伪集群搭建简单记录
1、官方下载加压后,根目录下新建data和log目录,然后分别拷贝两份,分别放到D盘,E盘,F盘 2、data目录下面新建myid文件,文件内容分别为1,2,3.注意文件没有后缀,不能是txt文…...
【Linux】匿名管道与命名管道,进程池的简易实现
文章目录 前言一、匿名管道1.管道原理2.管道的四种情况3.管道的特点 二、命名管道1. 特点2.创建命名管道1.在命令行上2.在程序中 3.一个程序执行打开管道并不会真正打卡 三、进程池简易实现1.makefile2.Task.hpp3.ProcessPool.cpp 前言 一、匿名管道 #include <unistd.h&g…...
HTML5+ API 爬坑记录
背景: 有个比较早些使用5开发的项目, 最近两天反馈了一些问题, 解决过程在此记录; 坑1: plus.gallery.pick 选择图片没有进入回调 HTML5 API Reference 在 联想小新 平板电脑上选择相册图片进行上传时, 打开相册瞬间 应用会自动重启, 相册倒是有打开, 不过应用重启了, 导…...
idea git将某个分支内的commit合并到其他分支
idea git将某个分支内的commit合并到其他分支 1.打开旧分支的代码提交记录 在IDEA中切换到新分支的代码,点击Git打开代码管理面板,在顶部点击Log:标签页(这个标签页内将来可以选择不同分支的个人/所有人的代码commit记录)&#x…...
Google hacking语法
Google hacking语法 文章目录 Google hacking语法site:inurl:intitle:filetypecacheintext注意 site: 搜索子域 跟域名site:www.baidu.com 定位 跟语言 site: jp inurl: 用于在特定url链接中搜索网站信息 inurl:login intitle: 使用intitle:指令返回页面标题中包含关键…...
Redis集群(新)
1.什么是集群 Redis集群实现了对Redis的水平扩容,可实现并发写操作,启动n个redis节点,将数据分别存储在不同的节点中,每块节点负责不同区域的插槽,所以Redis集群通过分区来提供一定程度的可用性。 Redis集群现采用的是…...
[JVM] 常用调优参数
随着Java应用程序的不断发展和优化,JVM调优已经变得越来越重要。在这篇文章中,我们将探讨一些常用的JVM调优参数,了解如何更好地优化Java应用程序的性能。 文章目录 1. -Xmx2. -Xms3. -XX:PermSize和-XX:MaxPermSize4. -XX:NewRatio5. -XX:Ma…...
【nlp】3.5 Transformer论文复现:3.解码器部分(解码器层)和4.输出部分(线性层、softmax层)
Transformer论文复现:3.解码器部分(解码器层)和4.输出部分(线性层、softmax层) 3.1 解码器介绍3.2 解码器层3.2.1 解码器层的作用3.2.2 解码器层的代码实现3.2.3 解码器层总结3.3 解码器3.3.1 解码器的作用3.3.2 解码器的代码实现3.3.3 解码器总结4.1 输出部分介绍4.2 线性…...
宝塔 Linux 面板安装一个高大上的论坛程序 —— Flarum
这个是很早搭建的版本,基于宝塔面板,比较复杂,如果想要简单的搭建方法,可以参看咕咕新写的这篇: 【好玩的 Docker 项目】10 分钟搭建一个高大上的论坛程序 购买腾讯云轻量应用服务器 待补充 登录服务器 待补充 BBR 加速脚本 BBR 加速脚本: BASH cd /usr/src &…...
数字化转型如何赋能企业实现数字化增值?
随着科技的不断发展,数字化转型已经成为了企业营销的重要趋势。数字化转型不仅可以提高企业的运营效率,还可以更好地满足消费者的需求,提升企业的市场竞争力。 一、数字化转型可以提高企业营销的精准性 在传统的企业营销中,营销人…...
python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...
关于uniapp展示PDF的解决方案
在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项: 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库: npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...
【LeetCode】算法详解#6 ---除自身以外数组的乘积
1.题目介绍 给定一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O…...
MFE(微前端) Module Federation:Webpack.config.js文件中每个属性的含义解释
以Module Federation 插件详为例,Webpack.config.js它可能的配置和含义如下: 前言 Module Federation 的Webpack.config.js核心配置包括: name filename(定义应用标识) remotes(引用远程模块࿰…...
