json 的一个巧妙的特性是可以防止部分读取。
如果客户端发送如下的 json:
[ {"someProperty": 1, "otherProperty": 2}, {"someProperty": 2, "otherProperty": 3}]
不知什么原因,连接中途关闭,我只收到
[ {"someProperty": 1, "otherProperty": 2}
我知道我会遇到 json 解码异常并且永远不会处理该有效负载。
protobuf 可以进行部分读取吗?
意思是,我有一些字节数组,a[0: n]
在n != len(a)
同一个模型中有效但显然缺少数据?
不,它不能阻止部分读取。
Protobuf 不是自终止的,并且积极地希望append === merge(即,以后的更改/添加只是扩展现有的有效负载)。如果你很幸运,它会在字段中间中断,通常会通过某种“EOF”失败结果/异常来检测;如果你不走运,它会恰好在字段边界中断,并且不会被检测到 - 它只会处理看到的字段。
基本上:protobuf 需要手动构建框架或其他外部完整性检查。