美文网首页
Protobuf java使用

Protobuf java使用

作者: 木子而东 | 来源:发表于2018-08-07 17:58 被阅读0次

ProtoBuf安装

ProtoBuf源码下载:https://github.com/google/protobuf/releases

windows编译器:protoc-3.6.1-win32.zip

Windows环境

protobuf-all-3.6.1.zip包解压,再将protoc-3.6.1-win32.zip解压把protoc.exe程序放到解压的protobuf-all-3.6.1的src文件夹目录下

新建Java项目(gradle)

通过idea新建一个gradle项目,在build.gradle文件下添加:

compile group:'com.google.protobuf',name:'protobuf-java',version:'3.6.1'

创建test.proto文件

syntax = "proto3";                                            //设置版本号,如不设置,默认2.0版本语法
option java_outer_classname = "PersonEntity";//生成的数据访问类的类名
option java_package = "com.smart.protobufdemo.protobuf";  //生成的数据访问类的package
message Person {
   int32 id = 1;//同上
   string name = 2;//必须字段,在后面的使用中必须为该段设置值
   string email = 3;//可选字段,在后面的使用中可以自由决定是否为该字段设置值
}

创建一个protoc命令代码

package com.smart.protobufdemo;

import java.io.IOException;

/**
 * @date : 2018/8/7 16:14
 * @author: lichen
 * @email : 1960003945@qq.com
 * @description :
 */
public class ExeProtobuf {
    public static void main(String[] args) throws IOException {
        String strCmd = "F:\\environment\\protobuf-all-3.6.1\\protobuf-3.6.1\\src\\protoc.exe " +  //下载的protoc.exe文件绝对路径
                " -I=F:\\workspace\\java\\ProtobufDemo " +                                  //test.proto文件相对路径
                " --java_out=F:\\workspace\\java\\ProtobufDemo\\src\\main\\java " +      //要生成的实体类路径
                " F:\\workspace\\java\\ProtobufDemo\\test.proto";                           //test.proto文件绝对路径

        Runtime.getRuntime().exec(strCmd);
    }
}

运行ExeProtobuf的main方法,在指定文件目录下生成PersonEntity类

测试

package com.smart.protobufdemo;

import com.smart.protobufdemo.protobuf.PersonEntity;

import java.io.IOException;

/**
 * @date : 2018/8/7 16:14
 * @author: lichen
 * @email : 1960003945@qq.com
 * @description :
 */

class ProtobufTest {
    public static void main(String[] args) throws IOException
    {
        //模拟将对象转成byte[],方便传输
        PersonEntity.Person.Builder builder = PersonEntity.Person.newBuilder();
        builder.setId(3);
        builder.setName("zhangsan");
        builder.setEmail("test@qq.com");
        PersonEntity.Person person = builder.build();
        System.out.println("before :" + person.toString());

        System.out.println("===========Person Byte==========");
        for (byte b : person.toByteArray())
        {
            System.out.print(b);
        }
        System.out.println();
        System.out.println(person.toByteString());
        System.out.println("================================");

        //模拟接收Byte[],反序列化成Person类
        byte[] byteArray = person.toByteArray();
        PersonEntity.Person p2 = PersonEntity.Person.parseFrom(byteArray);
        System.out.println("after :" + p2.toString());
    }

}

结果

---------------------------------分割线----------------------------------

Mac环境

安装

下载mac版本的protobuf 解压到指定目录
先给指定目录添加权限(sudo chmod -R 777 某一目录)
cd到指定目录,终端执行一下步骤

./configure
make
make check
make install

通过protoc --version 查看是否安装成功

编译proto文件,生成对应的java文件

protoc --java_out=./ protocal.proto

相关文章

网友评论

      本文标题:Protobuf java使用

      本文链接:https://www.haomeiwen.com/subject/chvavftx.html