Java:mac环境下使用protobuf

本文介绍了在Mac环境下如何配置和使用protobuf,包括从GitHub下载源码、编译protobuf、编写protobuf文件、生成Java类以及如何使用生成的类进行数据传输,强调protobuf在效率和大小上的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先需要了解下什么是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个字节)可小的多了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值