一直搞不清序列化和编码这两个概念,感觉有很多东西混在了一起。。。
现在我的理解是这样
- 编码表示将文本转化成字节流,以便放到内存或网络传输。最常见的是 Unicode 和 ASCII ,还有 GB2312 等等。
-
序列化其实可以分成两类:
- 将对象变成字节流,比如用 unicode 编码字符串,或用 Protobuf 编码对象。这里面只涉及编码这一步。
- 将对象转换成公共的格式。比如,把对象变成 json 或 xml 。
而 json/xml 最后用 unicode 编码成字节流(可能有做一些压缩空格之类的预处理),才到网络中传输。
- 我之前常常把 json 和 protobuf 划为对等,都认为是编码方式,但其实是 protobuf 和 Unicode 才是对等的。
- json/xml 是数据交换格式,表示如何把对象变成文本,而 protobuf 并不是,因此不能以文本表示这个数据(只能用字节流表示)。json/xml 和 protobuf 不是同一个地位上的东西。
- 数据交换格式也可以定义自己的转换成字节流的编码方式,但一般是用 Unicode ,因为运用最广泛。
不知道我这样理解对不对?