1.Xml分析后会使用OutputStream out进行序列化输入。
OutputStream out;
XmlSerializer serializer = Xml.newSerializer();
serializer.setOutput(out, "UTF-8");
serializer.startDocument("UTF-8", true);
但是使用OutputStream 序列化会很慢。
所以优化点在OutputSream。
2.可以使用Protobuf进行优化
因为Protobuf使用了二进制法进行压缩,所以相对xml来说会快很多。
- 1.项目的root根目录添加依赖
dependencies {
classpath 'com.android.tools.build:gradle:3.4.2'
classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.8'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
- 2.项目里面的build.gradle配置
apply plugin: 'com.android.application'
apply plugin: 'com.google.protobuf'
android {
sourceSets {
main {
java {
srcDir 'src/main/java'
}
proto {
srcDir 'src/main/proto'
include '**/*.proto'
}
}
}
}
//构建task
protobuf {
protoc {
artifact = 'com.google.protobuf:protoc:3.1.0'
}
generateProtoTasks {
all().each { task ->
task.builtins {
remove java
}
task.builtins {
java {}
// Add cpp output without any option.
// DO NOT omit the braces if you want this builtin to be added.
cpp {}
}
}
}
//生成目录
generatedFilesBaseDir = "$projectDir/src/generated"
}
dependencies {
implementation 'com.google.protobuf:protobuf-java:3.1.0'
implementation 'com.google.protobuf:protoc:3.1.0'
}
-
3.在项目中添加proto文件夹和proto对应的文件
-
4.编辑proto文件然后rebuild一下,生成类进行使用
//定义包名
option java_package="com.lg.xmlparse.bean";
//定义class名
option java_outer_classname = "ProPerson";
//对象类型
message properson{
required int32 id = 1 ;
required string name = 2;
required int32 age = 3 ;
}
- 5.使用
ProPerson.properson.Builder personBuilder = ProPerson.properson.newBuilder();
personBuilder.setId(12);
personBuilder.setAge(33);
personBuilder.setName("lee");
ProPerson.properson person = personBuilder.build();
File file=new File(this.getFilesDir(),"ProtoPerson.xml");
FileOutputStream outputStream = new FileOutputStream(file);
person.writeTo(outputStream);z
最后看一下在build里面proto生成的文件