概念
序列化是指把对象转换为字节序列的过程,而反序列化是指把字节序列恢复为对象的过程(客户端从文件中或网络上获得序列化后的对象字节流后,根据字节流中所保存的对象状态及描述信息,重建对象)。
为什么需要序列化?
For a complex object,“data” are everywhere in memory.
我们如何将这样一个对象存储到文件中? 如何将这个对象传递到另外一个进程(Inter-Process Communication), 或者传递到另外一台机器(Remote Procedure Call)? --序列化
We srialize an object into text (a human readable string/bytes array) or bytes (binary format).
Text Format
1. xml: 在webservice中应用最为广泛,但是数据冗余
2. json: 浏览器对于json数据支持非常好,有很多内建的函数支持。使用键值对的方式,压缩了一定的数据空间
3. ProtoBuf: 谷歌开源的一种数据格式,适合高性能,对响应速度有要求的数据传输场景。二进制数据格式,数据本身不具有可读性,反序列化之后得到真正可读的数据;序列化后体积相比Json和XML很小,适合网络传输,并且序列化反序列化速度很快。
4. QueryString: array<pair<string, string>>
[ "q" : "text",
"source": "web",
"timestamp": "20200704"
]
serialize: url?q=text&source=web×tamp=20200704
Binary Format
优点:更快 (no serialization at all, just dump the memory block)
缺点:1. 长度必须是预定义的,不能有动态分配的内存
2. 不是向下兼容的