您的位置:首页 > 其它

protobuf 初探

2017-11-23 13:49 253 查看
准备工作:

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);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: