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]