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对象}
}

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

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

相关文章

ACL权限

ACL权限 目录: 1. 什么是ACL 2. 操作步骤 1. 什么是ACL ACL是Access Control List的缩写,即访问控制列表 每个项目成员在有一个自己的项目目录,对自己的目录有完全权限 项目组中的成员对项目目录也有完全权限 其他人对项目目录没有…

Spring Boot配置文件 Spring日志文件相关的知识

在上文中,小编带领大家创建了一个Spring Boot项目,并且成功的执行了第一个SPring Boot项目(在网页上运行hello world) 那么,本文的主要作用便是带领大家走进:Spring Boot配置文件 && Spring日志文件…

基于C#实现外排序

一、N 路归并排序 1.1、概序 我们知道算法中有一种叫做分治思想,一个大问题我们可以采取分而治之,各个突破,当子问题解决了,大问题也就 KO 了,还有一点我们知道内排序的归并排序是采用二路归并的,因为分治…

数据丢失抢救神器之TOP10 Android 数据恢复榜单

在快节奏的数字时代,我们的生活越来越与智能手机交织在一起,使它们成为重要数据和珍贵记忆的存储库。由于意外删除、软件故障或硬件故障而丢失数据可能是一种痛苦的经历。值得庆幸的是,技术领域提供了 Android 数据恢复软件形式的解决方案。这…

SSL握手失败的解决方案

一、SSL握手失败的原因: 1,证书过期:SSL证书有一个有效期限,如果证书过期,就会导致SSL握手失败。 2,证书不被信任:如果网站的SSL证书不被浏览器或操作系统信任,也会导致SSL握手失败…

市场被套牢,没有了解积累和分配,昂首资本一一介绍

很多投资者对市场中的积累和分配的概念不是很清楚,下面昂首资本将一一介绍。 积累意味着尽可能多地买入筹码,而不大幅抬高价格,直到在你买入时的价格水平上没有或几乎没有筹码。这种买入通常发生在市场熊市之后,此时有最佳买入价…

电路 buck-boost相关知识

BUCK-BOOST 文章目录 BUCK-BOOST前言一、DC-DC工作模式电容电感特性伏秒积平衡原理 二、BUCK电路三、BOOST电路四、BUCK-BOOST电路总结 前言 最近需要用到buck-boost相关的电路知识,于是便写下这篇文章复习一下。 一、DC-DC 在学习buck-boost电路之前我们先来看一…

2023人形机器人行业海外科技研究:从谷歌看机器人大模型进展

今天分享的是人形机器人系列深度研究报告:《2023人形机器人行业海外科技研究:从谷歌看机器人大模型进展》。 (报告出品方:华鑫证券) 报告共计:26页 大模型是人形机器人的必备要素 长期来看,人…

python教程:正常shell与反弹shell

嗨喽,大家好呀~这里是爱看美女的茜茜呐 正常shell需要先在攻击端开机情况下开启程序,然后攻击端运行程序,才能连接 反弹shell,攻击端是服务端,被攻击端是客户端 正常shell,攻击端是客户端,被攻击端是服务端 反弹shell,先启用服务端,再启用客户端 反弹shell的好处…

TDA笔记:夏克林老师,南洋理工大学

TDA比传统的统计方法有优势:benchmark中展现了这种优势 laplacian矩阵 多种单纯复形构造方式,可以构造出不同表征 二部图:Dowker complex Tor algebra可以用到多大数据 目前较新

在CentOS 7.9上搭建高性能的FastDFS+Nginx文件服务器集群并实现外部远程访问

文章目录 引言第一部分:FastDFS介绍与安装1.1 FastDFS简介1.2 FastDFS安装1.2.1 安装Tracker Server1.2.2 安装Storage Server 1.3 FastDFS配置1.3.1 配置Tracker Server1.3.2 配置Storage Server1.3.3 启动FastDFS服务 第二部分:Nginx配置2.1 Nginx安装…

【外贸干货】领英客户开发与营销的六个策略方向

领英(LinkedIn)已经成为外贸营销人员,尤其是B2B外贸营销人员,一个重要且有效的社交媒体平台。 相比于其他社交媒体平台,领英(LinkedIn)在增加流量、产生高质量的潜在客户和建立思想领导力方面有着独有的优势。 因为领英(LinkedIn)不仅仅是获…