一、先来说说什么是序列化和反序列化?

java对象序列化的意思就是将对象的状态转换成字节流,以后可以通过这些值在生成相同状态的对象,对象序列化就是对象持久化的一种实现方法,它是将对象的属性和方法转化为一种序列化的形式用于存储和传输,反序列化就是根据这些保存的信息重建对象的过程。

总之:

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

反序列化就是将字节序列转换为java对象的过程

二、那么我们为什么要进行序列化呢?

当我们两个进程进行远程通信的时候,可以相互发送各种类型的数据,包括文本,图片等,然后这些数据都会以二进制序列的形式在网络上传送,那么两个java进程在通信的时候也可以实现对象的传送,这个时候就需要Java序列化了

发送方需要把java对象转换为字节序列然后在网络上进行传送,接收方需要从字节序列中恢复出java对象

三、那么Java序列化的好处是什么?

好处一:实现了数据的持久化,

好处二:利用序列化实现远程通信,在网络上进行对象的字节序列传送

四、涉及到序列化和反序列化的JavaApi

  • java.io.ObjectOutputStream 表示对象输出流,它的writeObject(Object) 方法可以对参数指定的obj对象进行序列化,把得到的字节序列写到一个目标输出流中
  • java.io.ObjectInputStream 表示对象输入流,它的readObject()方法从输入流中读取字节序列,再把他们反序列化成为一个对象并且返回

只有实现了Serialzable或者Externalizable 接口的类的对象才能被序列化,否则抛出异常

五、现在我们通过代码来说明如何实现序列化和反序列化:

1.先创建一个实体类:

package com.example.entity;/** Copyright 2013-2020 Smartdot Technologies Co., Ltd. All rights reserved.* SMARTDOT PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.**/import java.io.Serializable;/*** <p>** @author <a href="mailto:heyf@smartdot.com.cn">heyf</a>* @version 1.0, 2020-11-21 09:43:22* @class* @date 2020-11-21 09:43:22* @see </p>*/
public class SerialEntity implements Serializable {private String age;private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAge() {return age;}public void setAge(String age) {this.age = age;}}

2.创建一个类用来实现序列化:

package com.example.controller;/** Copyright 2013-2020 Smartdot Technologies Co., Ltd. All rights reserved.* SMARTDOT PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.**/import com.example.entity.SerialEntity;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;/*** 序列化* <p>** @class ObjSerializeAndDeserializeTest* @date 2020-11-21 09:39:29* @author <a href="mailto:heyf@smartdot.com.cn">heyf</a>* @version 1.0, 2020-11-21 09:39:29* @see </p>*/public class ObjSerializeAndDeserializeTest {public static void main(String[] args) {SerializePerson();}/** @Author HYF* @Description //TODO验证序列化id存在的意义* @Date 9:41 2020/11/21* @Param []* @return void**/public static void SerializePerson(){Logger logger = LoggerFactory.getLogger(ObjSerializeAndDeserializeTest.class);SerialEntity serialEntity=new SerialEntity();serialEntity.setAge("30");//创建一个输出流ObjectOutputStream outputStream=null;try{outputStream=new ObjectOutputStream(new FileOutputStream("D:\\1.实习\\-quartz-demo\\static\\test.txt"));//outputStream.writeObject(serialEntity);logger.info(serialEntity.toString());logger.info("序列化成功");} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {try{//关闭输出流outputStream.close();}catch(IOException e){e.printStackTrace();}}}
}

运行结果:

文件内容: 不要直接用txt记事本打开要用文本编辑器打开会乱码,我没有,所有大家凑合看吧

3、反序列化代码: 从文件中读取内容并且打印出来

package com.example.controller;/** Copyright 2013-2020 Smartdot Technologies Co., Ltd. All rights reserved.* SMARTDOT PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.**/import com.example.entity.SerialEntity;
import org.apache.ibatis.javassist.util.proxy.ProxyObjectInputStream;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.ObjectInputStream;/*** 反序列化,从文件中读取内容并且打印出来* <p>** @author <a href="mailto:heyf@smartdot.com.cn">heyf</a>* @version 1.0,* @class* @date* @see </p>*/
public class ObjSerializeAndDeserializeTest2 {public static void main(String[] args) {Logger logger= LoggerFactory.getLogger(ObjSerializeAndDeserializeTest2.class);SerialEntity serialEntity=DeserializePersion();logger.info(serialEntity.getAge());logger.info(serialEntity.getName());}private static SerialEntity DeserializePersion(){SerialEntity person = null;ObjectInputStream inputStream = null;try {inputStream = new ObjectInputStream(new FileInputStream("D:\\1.实习\\-quartz-demo\\static\\test.txt"));try {person = (SerialEntity) inputStream.readObject();System.out.println("执行反序列化过程成功。");} catch (ClassNotFoundException e) {e.printStackTrace();}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}  finally {try {inputStream.close();} catch (IOException e) {e.printStackTrace();}}return person;}
}

以上就是我们序列化和反序列化的过程。

但是如果正规来说我们的实体中缺少了一个显示定义的serialVersionUID,什么是serialVersionUID? 这个东西有什么作用?好处是什么?

敬请关注下一遍博客。

什么是Java序列化和反序列化?相关推荐

  1. java 序列化概念和作用_结合代码详细解读Java序列化与反序列化概念理解

    Java序列化与反序列化是什么?为什么需要序列化与反序列化?如何实现Java序列化与反序列化?本文围绕这些问题进行了探讨. 1.Java序列化与反序列化 Java序列化是指把Java对象转换为字节序列 ...

  2. Java中如何引用另一个类里的集合_【18期】Java序列化与反序列化三连问:是什么?为什么要?如何做?...

    Java序列化与反序列化是什么? Java序列化是指把Java对象转换为字节序列的过程,而Java反序列化是指把字节序列恢复为Java对象的过程: 序列化:对象序列化的最主要的用处就是在传递和保存对象 ...

  3. java序列化与反序列化(转)

    Java序列化与反序列化是什么?为什么需要序列化与反序列化?如何实现Java序列化与反序列化?本文围绕这些问题进行了探讨. 1.Java序列化与反序列化 Java序列化是指把Java对象转换为字节序列 ...

  4. java序列化和反序列化以及序列化ID的作用分析

     java序列化和反序列化 一.概念 java对象序列化的意思就是将对象的状态转化成字节流,以后可以通过这些值再生成相同状态的对象.对象序列化是对象持久化的一种实现方法,它是将对象的属性和方法转化为一 ...

  5. java序列化和反序列化_Java恶意序列化背后的历史和动机

    java序列化和反序列化 与Java的序列化机制相关的问题已广为人知. 有效的Java 1st Edition (第10章)和有效的Java 2nd Edition (第11章)的整个最后一章都专门讨 ...

  6. 教你彻底学会Java序列化和反序列化

    Java序列化是什么? Java序列化是指把Java对象转换为字节序列的过程,Java反序列化是指把字节序列恢复为Java对象的过程.反序列化:客户端重文件,或者网络中获取到文件以后,在内存中重构对象 ...

  7. 理论 | 教你彻底学会Java序列化和反序列化

    这是小小本周的第四篇 Java序列化是什么? Java序列化是指把Java对象转换为字节序列的过程,Java反序列化是指把字节序列恢复为Java对象的过程.反序列化:客户端重文件,或者网络中获取到文件 ...

  8. Java序列化与反序列化(一)

    目录 序列化与反序列化 1.最简单的使用:Serializable 接口 2. 序列化 ID 的问题 3. 静态字段不会序列化 4. 屏蔽字段:transient 5. 父类的序列化 6. 自定义序列 ...

  9. Serializable详解(1):代码验证Java序列化与反序列化

    说明:本文为Serializable详解(1),最后两段内容在翻译上出现歧义(暂时未翻译),将在后续的Serializable(2)文中补充. 介绍:本文根据JDK英文文档翻译而成,本译文并非完全按照 ...

  10. Java 序列化与反序列化

    Java 序列化与反序列化 文章目录 Java 序列化与反序列化 1 序列化与反序列化的概念 2 核心类与关键字总览 3 序列化与反序列化的过程 3 应用示例 4 序列化版本号的作用 serialVe ...

最新文章

  1. java 去掉最后一个换行符_Python 教程(一)第一个Python程序
  2. .net应用程序版本控制
  3. 赶紧3分钟学完15分钟的内容我要出去玩(8)
  4. php制作的ios端 跳转url,ThinkPHP 简易开发思路 MVC和URL跳转
  5. 第五章 shell学习之文件的排序、合并和分割
  6. java学习(五)包
  7. Ubuntu21.04设置国内镜像源
  8. Wordpress如何正确书写Robots.txt
  9. nyoj1110 一个简单数学题
  10. Power BI 数据分析可视化软件入门教程
  11. 5基于matplotlib的python数据可视化——导入Excel数据制作折线图
  12. BI报表工具有哪些?
  13. 读卡器与IC/ID卡的基本认识
  14. 发到微信的apk文件变成apk.1,如何安装,解决办法
  15. linux系统下一页,linux下一页
  16. java 生成拼音_java工具-常用汉语转拼音库Pinyin4j 、tinypinyin、JPinyin
  17. 解决一个JAVA小问题
  18. 亚马逊营销和运营手法的运用知多少?
  19. 小米电视2 android版本,小米电视2的配置参数是什么?小米电视2标配有什么?
  20. opencv 滤波 方框滤波 均值滤波 高斯滤波 中值滤波 双边滤波

热门文章

  1. ANDROID的 BLUETOOTH 实现机制--中介模式和代理模式
  2. idea热部署-解决热部署失效问题-【伸手党福利】
  3. java中数学归纳法_递归设计与数学归纳法
  4. linux普通用户监听1024以下的端口(80、443)
  5. python关键词对联_如何用深度学习框架PaddlePaddle实现智能春联
  6. 很多人猜测秦始皇兵马俑里面是真人?一尊破裂的泥俑揭露真相
  7. 使用class-dump-z
  8. 一些平板以及笔记本电脑推荐
  9. 精益生产七大浪费中过度加工浪费详解
  10. yEd Graph Editor 操作指南