为什么要 protobuf?做网络通信或者本地存储数据的时候,我们经常需要把结构化的数据(比如一个用户信息:ID、名字、年龄)打包成一串字节,发给别人,或者存到文件里。大多数人第一反应就是用 JSON 或者 XML。这两个东西确实方便,文本格式,人能看懂,调试也容易。但是,一旦你开始追求性能,或者你的程序需要频繁、大量地传输数据,JSON 和 XML 的问题就出来了:它们太啰嗦了,解析也慢。JSON 要一个一个字符去读,还要处理字符串、括号、引号,CPU 开销不小。而且同样的数据,JSON 传过去可能比原始数据大了好几倍。这时候就该 protobuf 上场了。protobuf 是 Google 搞出来的一套“结构化数据序列化”方案。它有这几个明显的好处:体积小。它不传字段名,只传编号,而且用了一种很聪明的变长编码。同样一个整数,如果值很小,它可能只占一个字节;JSON 传个"age":18要占好几个字节。所以 protobuf 出来的数据通常比 JSON 小 30% 以上。速度快。解析 JSON 要处理文本,而 protobuf 解析的是二进制,不用管字符编码、引号、转义,直接按格式读数据,快得多。这对高频通信的服务器来说差别巨大。强类型。你得先定义.proto文件,然后生成代码。字段类型、编号都是固定的。这样在编译阶段就能发现很多错误,不像 JSON 传个字段名拼写错