protobuf 初探

来源:互联网 发布:xshell mysql中文乱码 编辑:程序博客网 时间:2024/06/05 18:07

准备工作:
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);        }    }}


原创粉丝点击