我对序列化的工作原理有一个理论上的疑问,尤其是关于 JSON 等序列化方案和 CBOR 等二进制序列化方案之间的区别。
我的问题是:如果 JSON 序列化程序将对象转换为 JSON 字符串,那么,要存储或传输生成的 JSON 字符串,是否还必须将 JSON 字符串转换为其字节表示形式?这就是为什么二进制方案可能更快,因为它们已经产生了二进制输出?
在内存中,字符串无论如何都表示为字节序列(实际上,一切都只是内存中的字节序列),所以这应该不重要。
重要的是从 Javascript 变量的内存中表示形式转换为其等效字符串的内存中表示形式。一个极其简单的例子是值为 -1 的数值变量。这可以在内部用一个字节来表示:
> Buffer.of(-1)
<Buffer ff>
但是它的 JSON 序列化
"-1"
需要两个字节:
> Buffer.from(JSON.stringify(-1))
<Buffer 2d 31>
而且 JSON 序列化也需要时间。
这应该可以说明为什么更接近内部表示的二进制方案可以更快地输出(和输入)。