准备工作:
1.protobuf jar包的下载.
我使用的是protobuf-java-2.5.0.jar
2.电脑安装protobuf:
我们需要它来预处理代码。
实际操作:
1.准备文件×××.proto,这里我的是test.proto
2.因为是基于java的使用。这里需要将proto文件转换为jave可使用的文件,最红输出test.java:
protoc --java_out=./ test.proto
--java_out:表示输出java文件
--cpp_out:表示输出C++文件
./ 表示生成的文件放于哪个目录,我的./ 表示当前目录(linux系统)
3.创建工程测试
1)这里写了一个小app;
2)将jar文件(protobuf-java-2.5.0.jar)添加到项目
3)将生成结构文件test.proto生成的test.java添加到项目
test.proto 结构文件:
message Person {
optional int32 id = 1;
optional string name = 2;
}
代码
package com.example.ts.proto;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import static android.support.v7.widget.AppCompatDrawableManager.get;
public class MainActivity extends AppCompatActivity {
ByteArrayOutputStream out;
ByteArrayInputStream in;
TextView textView = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView)findViewById(R.id.protoTest);
createAndSend();
}
private void createAndSend(){
Test.Person.Builder builder = Test.Person.newBuilder();
builder.setId(11);
builder.setName("HelloProto");
builder.setEmail("******");
Test.Person person = builder.build();
out = new ByteArrayOutputStream();
try{
person.writeTo(out);
getInput();
}
catch(Exception exception){
exception.printStackTrace();
}
}
private void getInput(){
byte[] input = out.toByteArray();
in = new ByteArrayInputStream(input);
try{
Test.Person person = Test.Person.parseFrom(in);
display(person.getName());
}catch (Exception e){
e.printStackTrace();
}
}
private void display(String string){
android.util.Log.d("liu","string:"+string);
if(textView != null){
textView.setText(string);
}
}
}