当前位置: 首页 > news >正文

JAVA序列化和反序列化

JAVA序列化和反序列化

文章目录

  • JAVA序列化和反序列化
    • 序列化
      • 什么是序列化?
      • 为什么要进行序列化?
      • 如何将对线进行序列化
      • 具体实现过程
    • 完整代码

序列化

什么是序列化?

就是将对象转化为字节的过程

为什么要进行序列化?

  1. 让数据更高效的传输
  2. 让数据更好的被存储

如何将对线进行序列化

对象要想进行序列化必须满足两个条件:

  1. 该类必须实现 java.io.Serializable 接口
  2. 该类的所有属性必须是可序列化的

具体实现过程

通过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 子句从数据表中读取数据&#xf…...

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中切换到新分支的代码&#xff0c;点击Git打开代码管理面板&#xff0c;在顶部点击Log:标签页&#xff08;这个标签页内将来可以选择不同分支的个人/所有人的代码commit记录&#xff09;&#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的水平扩容&#xff0c;可实现并发写操作&#xff0c;启动n个redis节点&#xff0c;将数据分别存储在不同的节点中&#xff0c;每块节点负责不同区域的插槽&#xff0c;所以Redis集群通过分区来提供一定程度的可用性。 Redis集群现采用的是…...

[JVM] 常用调优参数

随着Java应用程序的不断发展和优化&#xff0c;JVM调优已经变得越来越重要。在这篇文章中&#xff0c;我们将探讨一些常用的JVM调优参数&#xff0c;了解如何更好地优化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 &…...

数字化转型如何赋能企业实现数字化增值?

随着科技的不断发展&#xff0c;数字化转型已经成为了企业营销的重要趋势。数字化转型不仅可以提高企业的运营效率&#xff0c;还可以更好地满足消费者的需求&#xff0c;提升企业的市场竞争力。 一、数字化转型可以提高企业营销的精准性 在传统的企业营销中&#xff0c;营销人…...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能&#xff0c;我们需要对它的功能特点进行分析&#xff1a; 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具&#xff1a; mysql&#xff1a;关系型数据库&am…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!

5月28日&#xff0c;中天合创屋面分布式光伏发电项目顺利并网发电&#xff0c;该项目位于内蒙古自治区鄂尔多斯市乌审旗&#xff0c;项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站&#xff0c;总装机容量为9.96MWp。 项目投运后&#xff0c;每年可节约标煤3670…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

C++ 基础特性深度解析

目录 引言 一、命名空间&#xff08;namespace&#xff09; C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用&#xff08;reference&#xff09;​ C 中的引用​ 与 C 语言的对比​ 四、inline&#xff08;内联函数…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…...

Map相关知识

数据结构 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子 节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只 有左子节点&#xff0c;有的节点只有…...