Android Protobuf应用及原理

序列化空间效率对比:

数据格式 5000条数据
Protobuf 22MB
Json 29MB

从上面的数据可以看出来,Protobuf序列化时,和Json对比,不管在时间和空间上都是更加高效。由于篇幅的原因就不展示反序列化的数据对比了。

  1. 支持向后兼容和向前兼容

当客户端和服务器同事使用一块协议的时候, 当客户端在协议中增加一个字节,并不会影响客户端的使用

  1. 支持多种编程语言

在Google官方发布的源代码中包含了c++、java、Python三种语言

至于缺点,Protobuf采用了二进制格式进行编码,这直接导致了可读性差;缺乏自描述,Protobuf是二进制格式的协议内容,要是不配合proto结构体根本看不出来什么来。

接入

在项目的根gradle配置如下

dependencies {
classpath ‘com.google.protobuf:protobuf-gradle-plugin:0.8.0’
}

在gradle中配置如下:

apply plugin: ‘com.google.protobuf’

android {
sourceSets {
main {
// 定义proto文件目录
proto {
srcDir ‘src/main/proto’
include ‘**/*.proto’
}
}
}
}

dependencies {
// 定义protobuf依赖,使用精简版
compile “com.google.protobuf:protobuf-lite:3.0.0”
compile (‘com.squareup.retrofit2:converter-protobuf:2.2.0’) {
exclude group: ‘com.google.protobuf’, module: ‘protobuf-java’
}
}

protobuf {
protoc {
artifact = ‘com.google.protobuf:protoc:3.0.0’
}
plugins {
javalite {
artifact = ‘com.google.protobuf:protoc-gen-javalite:3.0.0’
}
}
generateProtoTasks {
all().each { task ->
task.plugins {
javalite {}
}
}
}
}

apply plugin: 'com.google.protobuf'是Protobuf的Gradle插件,帮助我们在编译时通过语义分析自动生成源码,提供数据结构的初始化、序列化以及反序列等接口。

compile "com.google.protobuf:protobuf-lite:3.0.0"是Protobuf支持库的精简版本,在原有的基础上

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值