Uma propriedade interessante do json é que leituras parciais são evitadas.
Se um cliente enviar um json como:
[ {"someProperty": 1, "otherProperty": 2}, {"someProperty": 2, "otherProperty": 3}]
E por algum motivo a conexão fecha no meio do caminho e eu só recebo
[ {"someProperty": 1, "otherProperty": 2}
Sei que terei uma exceção de decodificação JSON e nunca processarei essa carga.
Leituras parciais podem ocorrer com protobuf?
Ou seja, tenho uma matriz de bytes, tal que a[0: n]
with n != len(a)
é válida no mesmo modelo, mas obviamente faltam dados?
Não, isso não impede leituras parciais.
Protobuf não é autoterminante, e é ativamente pretendido que append === merge (ou seja, alterações/adições posteriores simplesmente estendam a carga útil existente). Se você tiver sorte, ele quebrará no meio de um campo, o que normalmente será detectado com algum tipo de resultado/exceção de falha "EOF"; se você não tiver sorte , ele quebrará exatamente no limite de um campo, e não será detectado - ele simplesmente processará apenas os campos que foram vistos.
Basicamente: enquadramento manual ou outras verificações externas de integridade são necessárias com protobuf.