json 的一个巧妙特性是可以防止部分读取。
如果客户端发送如下 json:
[ {"someProperty": 1, "otherProperty": 2}, {"someProperty": 2, "otherProperty": 3}]
无论出于何种原因,连接中途关闭,我只收到
[ {"someProperty": 1, "otherProperty": 2}
我知道我会遇到 json 解码异常并且永远不会处理该有效负载。
protobuf 会发生部分读取吗?
意思是,我有一些字节数组,这样
a[0: n]
和 n != len(a)
在同一模型中有效,但显然缺少数据?
不,它不会阻止部分读取。
Protobuf 不是自我终止的,并且它是“主动意图”追加 === 合并(即以后的更改/添加只是扩展现有的有效负载)。 如果你幸运的话它会在字段中间中断,通常会通过某种“EOF”失败结果/异常来检测到;如果你不幸,它会在字段边界处完全破裂,并且不会被检测到 - 它只会处理看到的字段。 基本上:protobuf 需要手动成帧或其他外部完整性检查。