序列化和反序列化【积少成多的知识点】
文章目录
- 前言
- 一、序列化和反序列化是什么(what)
- 二、为什么要序列化(why)
- 三、序列化和反序列化使用在哪里(where,when)
- 四、怎样序列化(how)
- 五、java序列化中需要注意的点
- 1、static修饰的属性的值不会被序列化
- 2、Transient修饰的属性的值不会被序列化
- 3、序列化版本号serialVersionUID不同会导致序列化失败
- 总结
前言
你还在被问到序列化和反序列化是什么,为什么需要序列化,它被用在那些地方而不知道怎么回答而烦恼吗?那么让我们开始这段与序列化和反序列化的爱恨情仇吧。
这篇文章将以5W1H的方式分析,如果不知道5W1H是什么可以看我的这篇文章:尝试使用以5W1H分析法来学习5W1H分析法
一、序列化和反序列化是什么(what)
序列化 (Serialization):将对象转换为可以存储或传输的二进制序列的过程就是序列化。
反序列化:则是将过程反过来,将二进制序列转换为对象的过程就是反序列化。
二、为什么要序列化(why)
在实际应用中,我们经常会需要将对象持久化到本地磁盘中,或者需要将信息发送到其他设备来进行网络传输,这需要将要对象转化为机器可以识别的二级序列,于是就要用到序列化技术。
三、序列化和反序列化使用在哪里(where,when)
- 存储。
- 网络传输。
我看很多文章中会写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⊙)哦。
序列化和反序列化【积少成多的知识点】相关推荐
- PHP序列化与反序列化(__sleep与__wakeup)
前言 总结一下序列化和反序列化的入门知识主要介绍__sleep与__wakeup 简单介绍 1.序列化 将一个对象转换为字符串 2.反序列化 将一个字符串恢复成对象 3.常见魔术方法 __constr ...
- java序列化_夯实Java基础系列22:一文读懂Java序列化和反序列化
本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...
- Json数据的序列化与反序列化的三种常用方法介绍
以下内容是本作者从官网中看相应的教程后所做的demo,其体现了作者对相关知识点的个人理解..作者才疏学浅,难免会有理解不到位的地方..还请各位读者批判性对待... 本文主要介绍在Json数 ...
- 夯实Java基础系列22:一文读懂Java序列化和反序列化
本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...
- 序列化和反序列化的底层实现原理是什么?
序列化和反序列化作为Java里一个较为基础的知识点,大家心里也有那么几句要说的,但我相信很多小伙伴掌握的也就是那么几句而已,如果再深究问一下Java如何实现序列化和反序列化的,就可能不知所措了!遥记当 ...
- 序列化和反序列化的底层实现原理是什么
文章目录 一.基本概念 二.Java如何实现序列化和反序列化 三.相关注意事项 四.总结 序列化和反序列化作为Java里一个较为基础的知识点,大家心里也有那么几句要说的,但我相信很多小伙伴掌握的也就是 ...
- Android开发中混淆后Gson序列化、反序列化的那些坑,androidstudio配置
为什么呢? 因为反序列化创建对象本质还是利用反射, 会根据 json 字符串的 key 作为属性名称, value 则对应属性值. 如何解决 将序列化和反序列化的类排除混淆 使用 @Serialize ...
- 【CTF】buuctf web(三)——PHP序列化与反序列化
知识点 后台目录扫描工具:dirsearch 魔术方法wakeup()绕过:当成员属性数目大于实际数目时可绕过wakeup方法(CVE-2016-7124) 常见的备份文件后缀名:.git .svn ...
- java中的IO流之序列化与反序列化(对象数据和文件的读写交互)
前言必读 读者手册(必读)_云边的快乐猫的博客-CSDN博客 一.知识点介绍 1.什么是序列化与反序列化? 对象与磁盘的交互读写. 2.为什么要学? 2.1在之前的IO流中,都是内存与磁盘进行交互的读 ...
最新文章
- GitHub user guide:Hello world
- java中文getbytes为3,java 中文乱码问题
- Shiro + JWT + Spring Boot Restful 简易教程
- Angular core.js executeTemplate
- 案例研究:设计与方法_如何进行1小时的重新设计(案例研究)
- 容器中apscheduler不执行_APScheduler:定时任务框架
- 求素数算法(C语言)
- ftp linux 服务器 麒麟_麒麟系统安装ftp
- 【VUE】限制输入特殊字符
- 10月24日学习内容整理:自增约束条件,外键,修改表,复制表
- unity拖拽drag_【UGUI】UGUI的Drag拖拽与游戏物体的Drop进行交互
- 企业微信H5_自建应用连接H5
- Nlite后期处理技术小结(第三次更新...全文完)(by bluewind)
- python基于flask_sockets实现WebSocket
- 猜拳小游戏编程(python)
- 新飞飞不显示服务器,《新飞飞》官方网站-新资料片《异域远征军》-网易Q萌战斗网游...
- Asky极简教程:零基础1小时学编程,已更新前8节
- Lemon Judge OI评测机 | 资源及使用教程 | 比Cena更稳定的评测机 | 已完结
- Android平台页面路由框架ARouter原理
- windows开源版的pymol安装方法