序列化和反序列化
- 一.json库
- 二.简单使用json库
前面已经讲过TCP和UDP,也写过代码能够进行双方的通信了,那么有没有可能这种通信是不安全的呢?如果直接通信,可能会被底层捕捉;可能由于网络问题,一方只接收到了一部分字符;如果想要实现像QQ那样既能显示ID,又能显示内容该怎么做呢…为了解决一系列问题,就需要我们在应用层制定协议了。而应用层协议的一个大点就是序列化和反序列化。
什么是序列化和反序列化
-
序列化和反序列化是将对象转换为字节流或其他格式,以便在网络传输或持久化存储时使用,然后将其重新转换回对象的过程。
-
序列化是将对象转换为字节流的过程。这可以通过将对象的状态写入到文件、数据库或网络中来实现。序列化的结果可以是二进制格式、XML格式、JSON格式等。
-
反序列化是将字节流或其他格式转换回对象的过程。这可以通过从文件、数据库或网络中读取字节流,并使用相应的反序列化算法来实现。反序列化的结果是重新创建对象,并将其状态恢复为序列化之前的状态。
简而言之:序列化就是将一字符串转换成特定格式,例如:xxxyyyzz,转换成name=xxx,content=yyy,data=zz等特定结构。反序列化就是将特定的结构再转回字符串。
一.json库
简单地说,JSON 可以将 对象中表示的一组数据转换为字符串,然后就可以在网络或者程序之间轻松地传递这个字符串,并在需要的时候将它还原为各编程语言所支持的数据格式,例如在 PHP 中,可以将 JSON 还原为数组或者一个基本对象。在用到AJAX时,如果需要用到数组传值,这时就需要用JSON将数组转化为字符串.
总而言之就是帮助我们进行序列化和反序列化的库。
类似于:
注意这是一个字符串。它其实都是类似于key:value的形状,中间用逗号隔开。
安装第三方库
二.简单使用json库
一个第三方库,它需要给我们提供的是include头文件和.lib库文件,而它们的安装目录一般是固定的。头文件在/usr/include下,库文件在lib64下。
简单使用
1.序列化(两种打印方式)
具体流程:创建Value对象,然后像使用hash表那样进行kv操作,最后使用write方法,将其转换成json串。注意在编译时,也要链接第三方库。
注意:这依然是一个字符串,只是加了\n,让可读性更好。
2.反序列化
实际上与序列化过程差不多,定义一个Value对像和一个Reader对象,然后再依次读出。