protobuf 初探

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


猜你喜欢

转载自blog.csdn.net/liubin192837/article/details/78611621