一,应用场景
广告行业多平台之间, 会用http协议以post的方式传递很多上下文信息. 大平台(兼有pc和mobile),比如阿里/百度/腾讯目前都以protobuffer作为数据交换格式. 我所知道的纯移动流量平台mongo和小米,采用的json. 不能明白他们做选择时的考量是什么, 所以对两者做了简单的对比测试(当然,不一定能解决自己的困惑).
二, 案例设计
1, 测试proto协议
message Teacher{
required int32 id = 1;
required string name = 2;
//学生列表
repeated Student students = 3;
}
message Student {
required int32 id = 1;
required string name = 2;
optional string desc = 3;
}
2, 最近基本的java bean 类Teacher和Student, 属性和proto里的数据完全一致.
3, 针对以上数据格式, 做三组测试:
a) 混合数据: 如上图, 属性中既有数字, 又有字符串.
b) 纯数字测试: 把上图中的字符属性注释掉. 普通java bean也做对应处理.
c) 纯字符测试: 把上图中的数字属性注释掉.
三, 测试编码
1, proto数据格式的序列化,反序列化以及序列化后文件大小. 代码为"混合数据"的代码. 三组测试只有属性不一样, 做相应的注释就好.
@Test
public void protoSerialization() {
User.Teacher.Builder teacher = User.Teacher.newBuilder();
teacher.setId(100);
teacher.setName("刘备");
User.Student.Builder student;
for(int i=0;i<size;i++){
student = User.Student.newBuilder();
student.setId(101+i);
student.setName("赵云");
student.setDesc("五虎将之一");
teacher.addStud