什么是protorpc消息StringField和BytesField的最大长度?

时间:2016-02-12 05:39:33

标签: google-cloud-endpoints

有人知道最大长度吗? Google文档不包含它。 https://cloud.google.com/appengine/docs/python/tools/protorpc/messages/fieldclasses

1 个答案:

答案 0 :(得分:1)

Protobufs将字符串和字节编码为无限数量的字节,前面是整数长度。长度编码为可以保存任何值的varint。即varint没有像C int或Java long那样的固定大小。因此,从理论上讲,您可以将尽可能多的数据填充到字符串或字节字段中,因为您需要支持内存。

但是,protobufs通常由Java,Go,Python等本机实现处理。这些语言确实具有最大长度。例如,在Java中,Strings实现为数组,数组由int编制索引,字符串的最大大小和数组的最大长度约为21亿个字符(准确地说是2 ^ 31 -1)。因此,protobuf中的任何更长的字符串都不可互操作,并且可能需要特殊的代码来读写。

这就是理论。现在实际上,如果您的数据大小超过千兆字节,请不要尝试使用protorpc(或任何RPC格式)传递它。您需要一个旨在处理大型数据的服务和API,例如Blobstore。您的protorpc代码可以使用blob的URL。