文章目录

  • 前言
  • 一、序列化和反序列化是什么(what)
  • 二、为什么要序列化(why)
  • 三、序列化和反序列化使用在哪里(where,when)
  • 四、怎样序列化(how)
  • 五、java序列化中需要注意的点
    • 1、static修饰的属性的值不会被序列化
    • 2、Transient修饰的属性的值不会被序列化
    • 3、序列化版本号serialVersionUID不同会导致序列化失败
  • 总结

前言

你还在被问到序列化和反序列化是什么,为什么需要序列化,它被用在那些地方而不知道怎么回答而烦恼吗?那么让我们开始这段与序列化和反序列化的爱恨情仇吧。
这篇文章将以5W1H的方式分析,如果不知道5W1H是什么可以看我的这篇文章:尝试使用以5W1H分析法来学习5W1H分析法


一、序列化和反序列化是什么(what)

序列化 (Serialization):将对象转换为可以存储或传输的二进制序列的过程就是序列化。
反序列化:则是将过程反过来,将二进制序列转换为对象的过程就是反序列化。

二、为什么要序列化(why)

在实际应用中,我们经常会需要将对象持久化到本地磁盘中,或者需要将信息发送到其他设备来进行网络传输,这需要将要对象转化为机器可以识别的二级序列,于是就要用到序列化技术。

三、序列化和反序列化使用在哪里(where,when)

  1. 存储。
  2. 网络传输。
    我看很多文章中会写RMI(Remote Method Invocation)远程方法调用,是JDK1.2中新增的功能,它支持存储于不同地址空间的程序级对象之间彼此进行通信,我认为它包含在网络传输当中。

四、怎样序列化(how)

java中实现序列化很简单,只要实现Serializable接口,然后就可以通过ObjectOutputStream和ObjectInputStream来进行序列化和反序列化了。
平时常用json和xml都是序列化协议。
比如json全名javaScript Object Notation ,我们平时常用的JsonObject底层就实现了JsonSerializable接口。

五、java序列化中需要注意的点

1、static修饰的属性的值不会被序列化

private static long size= 10;

因为序列化的是对象的信息,而static修饰的属性是类的信息,因此static修饰的属性不会被序列化。

2、Transient修饰的属性的值不会被序列化

private  transient  int  secret;

Transient修饰符的作用就是让被修饰的属性不会被序列化。

3、序列化版本号serialVersionUID不同会导致序列化失败

serialVersionUID版本号有两种声明方式
1、开发者自己定义。

private  static  final  long serialVersionUID = 1L;

2、默认生成,当实现了Serializable接口的类没有声明serialVersionUID版本号时,JDK根据类的属性自动生成一个不会重复的版本号,这样会导致只要类有变化其版本号就会改变,而另一方的版本号与改变后的版本号不一致就会导致序列化失败。

总结

序列化时将对象转换为二级制序列的过程,通常用在存储和网络传输当中。
本篇文章是网上找了很多文章再加上自己的见解著成的,如有不妥的地方或者又补充请大家在评论区回复或者私信告诉我,感谢大家指正(⊙o⊙)哦。

序列化和反序列化【积少成多的知识点】相关推荐

  1. PHP序列化与反序列化(__sleep与__wakeup)

    前言 总结一下序列化和反序列化的入门知识主要介绍__sleep与__wakeup 简单介绍 1.序列化 将一个对象转换为字符串 2.反序列化 将一个字符串恢复成对象 3.常见魔术方法 __constr ...

  2. java序列化_夯实Java基础系列22:一文读懂Java序列化和反序列化

    本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...

  3. Json数据的序列化与反序列化的三种常用方法介绍

    以下内容是本作者从官网中看相应的教程后所做的demo,其体现了作者对相关知识点的个人理解..作者才疏学浅,难免会有理解不到位的地方..还请各位读者批判性对待...       本文主要介绍在Json数 ...

  4. 夯实Java基础系列22:一文读懂Java序列化和反序列化

    本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...

  5. 序列化和反序列化的底层实现原理是什么?

    序列化和反序列化作为Java里一个较为基础的知识点,大家心里也有那么几句要说的,但我相信很多小伙伴掌握的也就是那么几句而已,如果再深究问一下Java如何实现序列化和反序列化的,就可能不知所措了!遥记当 ...

  6. 序列化和反序列化的底层实现原理是什么

    文章目录 一.基本概念 二.Java如何实现序列化和反序列化 三.相关注意事项 四.总结 序列化和反序列化作为Java里一个较为基础的知识点,大家心里也有那么几句要说的,但我相信很多小伙伴掌握的也就是 ...

  7. Android开发中混淆后Gson序列化、反序列化的那些坑,androidstudio配置

    为什么呢? 因为反序列化创建对象本质还是利用反射, 会根据 json 字符串的 key 作为属性名称, value 则对应属性值. 如何解决 将序列化和反序列化的类排除混淆 使用 @Serialize ...

  8. 【CTF】buuctf web(三)——PHP序列化与反序列化

    知识点 后台目录扫描工具:dirsearch 魔术方法wakeup()绕过:当成员属性数目大于实际数目时可绕过wakeup方法(CVE-2016-7124) 常见的备份文件后缀名:.git .svn ...

  9. java中的IO流之序列化与反序列化(对象数据和文件的读写交互)

    前言必读 读者手册(必读)_云边的快乐猫的博客-CSDN博客 一.知识点介绍 1.什么是序列化与反序列化? 对象与磁盘的交互读写. 2.为什么要学? 2.1在之前的IO流中,都是内存与磁盘进行交互的读 ...

最新文章

  1. GitHub user guide:Hello world
  2. java中文getbytes为3,java 中文乱码问题
  3. Shiro + JWT + Spring Boot Restful 简易教程
  4. Angular core.js executeTemplate
  5. 案例研究:设计与方法_如何进行1小时的重新设计(案例研究)
  6. 容器中apscheduler不执行_APScheduler:定时任务框架
  7. 求素数算法(C语言)
  8. ftp linux 服务器 麒麟_麒麟系统安装ftp
  9. 【VUE】限制输入特殊字符
  10. 10月24日学习内容整理:自增约束条件,外键,修改表,复制表
  11. unity拖拽drag_【UGUI】UGUI的Drag拖拽与游戏物体的Drop进行交互
  12. 企业微信H5_自建应用连接H5
  13. Nlite后期处理技术小结(第三次更新...全文完)(by bluewind)
  14. python基于flask_sockets实现WebSocket
  15. 猜拳小游戏编程(python)
  16. 新飞飞不显示服务器,《新飞飞》官方网站-新资料片《异域远征军》-网易Q萌战斗网游...
  17. Asky极简教程:零基础1小时学编程,已更新前8节
  18. Lemon Judge OI评测机 | 资源及使用教程 | 比Cena更稳定的评测机 | 已完结
  19. Android平台页面路由框架ARouter原理
  20. windows开源版的pymol安装方法

热门文章

  1. JedisPubSub
  2. 在macOS中同时安装jdk8、jdk9、jdk11、jdk12并自由切换
  3. Python如何比较两张图片的相似度
  4. 第二十一章、系统配置工具(网络与打印机)与硬件侦测
  5. 基于R语言revest包的网络爬虫对豆瓣网TOP250的电影特征的抓取
  6. maven exclusion写法
  7. 硬盘无法识别怎么办?
  8. foobar_Foobar挑战:Google的秘密招聘流程
  9. 【HTML——旋转线条】(效果+代码)
  10. GitKraken使用—01、GitKraken的安装与破解