提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
AndroidStudio中使用Protocol Buffer
提示:以下是本篇文章正文内容,下面案例可供参考
一、配置
安装插件 :Protobuf Support
Project build.gradle中加入:
classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.17'
Module build.gradle中加入:
plugins {
id "com.google.protobuf"
}
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.builtins {
remove java
}
task.plugins {
javalite { }
}
}
}
}
android {
sourceSets {
main {
java {
srcDirs 'src/main/java'
}
proto {
srcDir 'src/main/proto'
}
}
}
}
dependencies {
implementation 'com.google.protobuf:protobuf-lite:3.0.1'
}
然后在Proto文件下编写自己的proto文件,如:
syntax = 'proto3';
//编译之后生成类所在的包名
option java_package = "com.example.proto";
message Persons{
message Person{
string name = 1;
int32 id = 2;
string email = 3;
}
repeated Person info =1;
}
编译之后会在build文件夹下生成相关的类文件
二、使用
自动生成上述类文件后,就可以使用啦
1.写入数据
//多条数据序列化
public void test1(){
Prototest.Persons.Builder builder =Prototest.Persons.newBuilder();
for(int i =0;i<100;i++){
Prototest.Persons.Person.Builder person =Prototest.Persons.Person.newBuilder();
person.setId(i);
person.setEmail(i+"");
person.setName("candy"+i);
builder.addInfo(person);
}
Prototest.Persons persons = builder.build();
//写文件
try {
FileOutputStream fileOutputStream = new FileOutputStream(new File("1.txt"));
persons.writeTo(fileOutputStream);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
2、读取数据
//多条数据反序列化
public List<Prototest.Persons.Person> test2(){
try {
Prototest.Persons persons = Prototest.Persons.parseFrom(new FileInputStream(new File("1.txt")));
List<Prototest.Persons.Person> personList = persons.getInfoList();
return personList;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
总结
整挺好