07
2020
08

Protobuf3和protobuf2比,更新的内容

1.字段前取消了required和optional两个关键字,目前可用的只有repeated关键字。

2.不可以现设置默认值了。

  a.string默认为空串

  b.枚举默认为第一个枚举定义的第一个值。并且必须是0,且为无效值,所有有意义的值请不要定义成0值

  c.bytes默认为空bytes

  d.bool默认为false

  e.数字类型默认为0

注意点:当你设置了message的变量等于 默认值时,序列化后是不占用空间的举例如下

message LogoutResponse{

uint32 result_code = 1; //数字类型 默认值为0

}

例如


LogoutResponse pt = LogoutResponse.newBuilder()

                .setResultCode(0)  //设置了默认值0

                .build();


Log.d(“test”,"pt serializedSize = "+pt.getSerializedSize() ) //serializedSize=0

此时调用 pt.getSerializedSize() 返回的值是0,也就是序列化后buf大小为0,

那么解析 序列化后buf为0的message,就可以直接使用默认值


void received(byte [] buf){

 CodedInputStream codedInputStream=null;

 LogoutResponse pt = LogoutResponse.getDefaultInstance(); //使用默认值;

    if (buf.length > 0) {

        codedInputStream = CodedInputStream.newInstance(buf);

        pt = LogoutResponse.parseFrom(codedInputStream);

     }

 Log.d("test","logout result="+pt.getResultCode() )   //result=0

}

« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。