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 &…...
数字化转型如何赋能企业实现数字化增值?
随着科技的不断发展,数字化转型已经成为了企业营销的重要趋势。数字化转型不仅可以提高企业的运营效率,还可以更好地满足消费者的需求,提升企业的市场竞争力。 一、数字化转型可以提高企业营销的精准性 在传统的企业营销中,营销人…...
水下机器人开发3大技术瓶颈与UUV Simulator解决方案
水下机器人开发3大技术瓶颈与UUV Simulator解决方案 【免费下载链接】uuv_simulator Gazebo/ROS packages for underwater robotics simulation 项目地址: https://gitcode.com/gh_mirrors/uu/uuv_simulator 水下机器人开发面临动力学建模复杂、传感器数据稀缺、控制算法…...
别再只盯着batch-size了!用Tesla V100训练YOLO时,这些隐藏的显存杀手和监控技巧你知道吗?
别再只盯着batch-size了!用Tesla V100训练YOLO时,这些隐藏的显存杀手和监控技巧你知道吗? 当你手握一块Tesla V100这样的顶级GPU,却发现训练YOLO时依然频频遭遇"爆显存"的尴尬,这感觉就像开着跑车却堵在早高…...
GraalVM静态镜像启动内存飙高300%?别再盲目加--no-fallback!4类反射/资源/代理误配导致的隐式堆膨胀全解析
第一章:GraalVM静态镜像内存优化性能调优指南GraalVM 静态镜像(Native Image)通过提前编译(AOT)将 Java 应用转化为独立的原生可执行文件,显著降低启动延迟与运行时内存开销。但默认构建的镜像常存在堆内存…...
FPGA智能连接板Jumperlink:解决电子工程跳线痛点
1. 项目概述:告别跳线混乱时代作为一名在电子工程领域摸爬滚打十年的老鸟,我经历过无数次这样的崩溃时刻:当你花了两小时搭建的电路板因为一根松动的跳线而全线瘫痪,或是三个月后重新打开项目时,面对那团五彩斑斓的&qu…...
【GraalVM静态镜像内存优化终极指南】:20年JVM专家亲授5大内存泄漏陷阱与3步零GC启动法
第一章:GraalVM静态镜像内存优化全景认知GraalVM 静态原生镜像(Native Image)通过提前编译(AOT)将 Java 应用编译为独立可执行文件,显著降低启动延迟与运行时内存开销。然而,静态镜像的内存行为…...
猫抓浏览器插件:终极网页资源嗅探工具,轻松获取视频音频图片
猫抓浏览器插件:终极网页资源嗅探工具,轻松获取视频音频图片 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 你是否经常在网…...
告别手动输入!SAP批次特性值自动填充的ABAP增强实战:以MIGO前台为例
SAP批次特性值自动填充的ABAP增强实战:从MIGO到通用解决方案 在SAP项目实施过程中,业务用户经常抱怨需要重复输入相同的数据,特别是在处理批次管理相关事务时。想象一下仓库管理员每天要处理上百个物料移动,每次都需要手动填写相同…...
Qwen3-4B-Thinking作品分享:碳足迹核算标准解读+企业减排路径推理生成
Qwen3-4B-Thinking作品分享:碳足迹核算标准解读企业减排路径推理生成 1. 模型介绍 Qwen3-4B-Thinking-2507-Gemini-2.5-Flash-Distill是基于通义千问Qwen3-4B官方模型开发的专业推理模型。这个4B参数的稠密模型具有原生256K tokens的上下文处理能力,并…...
PYTHON学习笔记12(os模块)
OS文件/目录方法os模块是python标准库中的一个重要模块,提供了与操作系统交互的功能,通过此模块可以执行文件操作、目录操作、环境变量管理、进程管理等任务。os模块是跨平台的,可以在不同的操作系统使用相同的代码。使用os模块之前ÿ…...
思源宋体CN:7种字重免费开源字体如何快速提升你的中文设计效果
思源宋体CN:7种字重免费开源字体如何快速提升你的中文设计效果 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 还在为中文排版设计而烦恼吗?找不到既美观又免费…...
