经常能看到或者听到序列化或者反序列化这样的字眼
那么什么叫做序列化?什么又叫做反序列化呢?
概念
Java序列化就是指把Java对象转换为字节序列的过程。
而序列化最重要的作用就是在传递和保存对象时,保证对象的完整性和可传递性。对象转换为有序字节流,以便在网络上传输或者保存在本地文件中。
Java反序列化就是指把字节序列恢复为Java对象的过程。
反序列化的最重要的作用就是根据字节流中保存的对象状态及描述信息,通过反序列化重建对象。
综上我们可以总结出:序列化和反序列化的核心作用就是对象状态的保存和重建。(整个过程核心点就是字节流中所保存的对象状态及描述信息)
json/xml的数据传递(本文重点)
在数据传输(也可称为网络传输)前,先通过序列化工具类将Java对象序列化为json/xml文件。
在数据传输(也可称为网络传输)后,再将json/xml文件反序列化为对应语言的对象
这里的工具类指的就是(比如jackson或者fastjson或者gson都可以做到)
简单来看一下网络传输中使用gson来操作序列化和反序列化(jackson和fastjson类似):
序列化
假如有一个User
类,拥有 name
, email
, age
, isDeveloper
四个属性,如下:
//假设定义好了POJO,这里直接写有参构造
User user = new User(
"Norman",
"norman@futurestud.io",
26,
true
);
使用Gson将它序列化:
Gson gson = new Gson();
//使用toJson方法可以将对象序列化成json
String userJson = gson.toJson(user);
得到的结果如下:
{
"isDeveloper":true,
"name":"Norman",
"age":26,
"email":"norman@futurestud.io"
}
反序列化
先定义一段JSON字符串
String userJson = "{'isDeveloper':false,'name':'xiaoqiang','age':26,'email':'578570174@qq.com'}";
Gson反序列化
User user = gson.fromJson(userJson, User.class);
参考文章:
Gson基本用法:https://blog.csdn.net/chenrenxiang/article/details/80291224 (就是以上的例子)
FastJSON、Gson、Jackson了解:https://www.cnblogs.com/weibanggang/p/9517223.html
fastjson生成和解析json数据,序列化和反序列化数据https://blog.csdn.net/qq_34272995/article/details/52993109
Java下利用Jackson进行JSON解析和序列化:https://blog.csdn.net/zmx729618/article/details/52161069
序列化优点
- 将对象转为字节流存储到硬盘上,当JVM停机的话,字节流还会在硬盘上默默等待,等待下一次JVM的启动,把序列化的对象,通过反序列化为原来的对象,并且序列化的二进制序列能够减少存储空间(永久性保存对象)
- 序列化成字节流形式的对象可以进行网络传输(二进制形式),方便了网络传输。
- 通过序列化可以在进程间传递对象。
一段话理解序列化和反序列化
序列化是指把一个Java对象变成二进制内容,本质上就是一个byte[]数组。 为什么要把Java对象序列化呢?因为序列化后可以把byte[]保存到文件中,或者把byte[]通过网络传输到远程,这样,就相当于把Java对象存储到文件或者通过网络传输出去了。 有序列化,就有反序列化,即把一个二进制内容(也就是byte[]数组)变回Java对象。有了反序列化,保存到文件中的byte[]数组又可以“变回”Java对象,或者从网络上读取byte[]并把它“变回”Java对象。
参考:https://blog.csdn.net/tree_ifconfig/article/details/82766587