protobuf 编译proto文件

1. 下载protobuf

protobuf的github:

GitHub - protocolbuffers/protobuf: Protocol Buffers - Google's data interchange format

按照其md介绍所说,想要直接使用的话,可以使用pre-built版本的执行文件:

点击链接进去,还是按照上边截图的说法找到对应平台的版本的zip包即可'protoc-$VERSION-$PALATFORM.zip',比如:

 

下载解压即可,会有个exe执行文件:

 

2. 编写protobuf

接下来是编写protobuf,详细如何编写不介绍,感兴趣的同学去官方看一下,这里粘贴处java-vector-tile包的一个protobuf(其中的package名称修改为了'jffffff',用于做测试的):

package jffffff;

message Tile {

        // GeomType is described in section 4.3.4 of the specification
        enum GeomType {
             UNKNOWN = 0;
             POINT = 1;
             LINESTRING = 2;
             POLYGON = 3;
        }

        // Variant type encoding
        // The use of values is described in section 4.1 of the specification
        message Value {
                // Exactly one of these values must be present in a valid message
                optional string string_value = 1;
                optional float float_value = 2;
                optional double double_value = 3;
                optional int64 int_value = 4;
                optional uint64 uint_value = 5;
                optional sint64 sint_value = 6;
                optional bool bool_value = 7;

                extensions 8 to max;
        }

        // Features are described in section 4.2 of the specification
        message Feature {
                optional uint64 id = 1 [ default = 0 ];

                // Tags of this feature are encoded as repeated pairs of
                // integers.
                // A detailed description of tags is located in sections
                // 4.2 and 4.4 of the specification
                repeated uint32 tags = 2 [ packed = true ];

                // The type of geometry stored in this feature.
                optional GeomType type = 3 [ default = UNKNOWN ];

                // Contains a stream of commands and parameters (vertices).
                // A detailed description on geometry encoding is located in 
                // section 4.3 of the specification.
                repeated uint32 geometry = 4 [ packed = true ];
        }

        // Layers are described in section 4.1 of the specification
        message Layer {
                // Any compliant implementation must first read the version
                // number encoded in this message and choose the correct
                // implementation for this version number before proceeding to
                // decode other parts of this message.
                required uint32 version = 15 [ default = 1 ];

                required string name = 1;

                // The actual features in this tile.
                repeated Feature features = 2;

                // Dictionary encoding for keys
                repeated string keys = 3;

                // Dictionary encoding for values
                repeated Value values = 4;

                // Although this is an "optional" field it is required by the specification.
                // See https://github.com/mapbox/vector-tile-spec/issues/47
                optional uint32 extent = 5 [ default = 4096 ];

                extensions 16 to max;
        }

        repeated Layer layers = 3;

        extensions 16 to 8191;
}

3. 执行命令生成java

(我的protoc版本为:protoc-21.0-win64)

接下来,进入到proto的目录,在当前位置开启cmd窗口,并新建'qwe'目录。

输入命令($protoc_path --java_out=${your_java_package_dir} ${proto_file}):

E:\protoc-21.0-win64\bin\protoc --java_out=qwe/ 1.proto

生成结果:

-tips:

1. 这里编写一个输出java到绝对路径的方式(cmd在1.proto目录下):

E:\protoc-21.0-win64\bin\protoc --java_out=G:\tes\eee 1.proto

2. 再写一个proto位置为相对路径的(cmd在eee目录下):

# 这两个都可以
E:\protoc-21.0-win64\bin\protoc --java_out=G:\tes\eee  eee/1.proto

E:\protoc-21.0-win64\bin\protoc --java_out=G:\tes\eee  eee\1.proto

3. 这样报错:

G:\tes>E:\protoc-21.0-win64\bin\protoc --java_out=G:\tes\eee  --proto_path=G:\tes\eee\1.proto
Missing input file.

4. 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值