Java:mac环境下使用protobuf

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/new_Aiden/article/details/73076860

首先需要了解下什么是protobuf。它是谷歌开源的消息传输协议,比JSON、XML等更快、更轻、更小。并且支持跨平台跨平台。
我们完全可以考虑使用protobuf代替JSON或者XML。不过其配置比JSON或者XML繁琐一下。
我们先从github上下载protobuf

https://github.com/google/protobuf.git

下载的只是protobuf的源代码,我们需要用gcc进行编译。
我们进入protobuf文件夹下。

./configure
make
make check
make install

执行完上述命令后,就编译完整个protobuf了。而protobuf的命令行工具文件在/src文件夹下面。
我们将该文件夹加入到环境变量中以方便使用。

sudo vim /etc/paths

将文件在Finder打开,然后拖入到终端,保存后退出。

接着我们编写protobuf文件,命名为com.model.Person.proto

syntax = "proto2";

option java_package = "com.model";
option java_outer_classname = "Person";

message person
{
    required int32 id = 1;
    required string username = 2;
    required string password = 3;
}

这里使用了proto2的语法。
java_package 定义了生成的Java文件会在哪个包下面
java_outer_classname 定义了这个Java文件最外面的类名字为Person
message person 定义了这个Java文件中会有一个外部类为Person的内部类person。然后定义了它的属性id、username、password

我们执行命令,就会生成com.model.Person.java文件了。

protoc --java_out=./java ./com.model.Person.proto

–java_out 定义了protobuf的输出为Java文件,并且输出的目录为当前的java文件夹下。之前定义了java_package = “com.model”。会自动的判断java文件夹下是否有com/model文件夹,如果没有,则会自动创建。
这样我们就生成了Person类了。

我们来开始使用这个类。

    Person.person.Builder builder = Person.person.newBuilder();
    builder.setId(1);
    builder.setUsername("Aiden");
    builder.setPassword("123456");
    person one = builder.build();

    byte[] bytes = one.toByteArray();
    System.out.println(Arrays.toString(bytes));

    Person.person two = Person.person.parseFrom(bytes);
    System.out.println(two.toString());

可能会有人觉得很奇怪。为什么是Person.person?
这是因为刚刚protobuf文件写的使用定义了java_outer_classname = “Person”,这个Person只是作为外部类而已,这个外部类能够包含很多数据类型,其中就包含了person。而person这个内部类只能通过构造器模式生成,不能直接new,就有了上面的代码了。
我们输出了person的字节,可以看出,只用了17个字节就存储了person对象,这可比JSON(JSON需要41个字节)可小的多了!

猜你喜欢

转载自blog.csdn.net/new_Aiden/article/details/73076860
今日推荐