Protobuffer和json 简单对比(java语言)

本文对比了Protobuf和JSON在Java应用程序中的使用,特别是在广告行业的多平台数据交换中的应用场景。通过混合数据、纯数字和纯字符的测试,结果显示Protobuf在性能和序列化后的文件大小上具有优势,尤其适合跨网传输,可以降低数据传输成本。然而,JSON在某些场景下仍有其独特优势,并非被Protobuf完全替代。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一,应用场景

广告行业多平台之间, 会用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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值