protobuf发送和接收空数据

protobuf可以将空数组转换成对象,并且,如果protobuf对象中没有给任何属性设置值,那转换成的byte[]数组是空的。
如果protobuf对象没有属性,也可以接受一个非空数组反序列化成protobuf对象(兼容)

protobuf代码如下:

syntax = "proto2";

message Ddata{
	repeated data dataList =1;
	optional data optData = 2;
}
message data{
	optional uint32 a=1;
}
message empty{
	
}

Java测试代码

        D.data.Builder builder = D.data.newBuilder();
        D.data build = builder.build();
        System.out.println(Arrays.toString(build.toByteArray()));// 输出[]
        System.out.println(Arrays.toString(D.data.getDefaultInstance().toByteArray()));// 输出[]
        
        D.data.Builder data2 = D.data.newBuilder();
        data2.setA(22);
        System.out.println(Arrays.toString(data2.build().toByteArray()));//输出[8, 22]
        System.out.println(Arrays.toString(D.empty.parseFrom(data2.build().toByteArray()).toBuilder().build().toByteArray()));//输出[8, 22]

你可能感兴趣的:(java开发)