上次我们提到了一个比较特殊的类,Addressbook,然后他开头第二行有这末个东西
要编辑这个proto后缀的文件,需要用protoc来编辑
https://github.com/protocolbuffers/protobuf/releases
不要问我为什么不下载64位的,问就是64位的我不会搞
这样做的好处是,在任何地方都可以运行.exe文件
此电脑-属性-高级系统设置-高级-环境变量-编辑用户变变量的Path变量-添加protoc.exe的所在目录.
比如我的目录是:D:\Protoc\protoc-3.7.0-rc-2-win32\bin
如果没有include文件夹下的文件,在使用protoc.exe时会提示缺少google\protobuf\timestamp.proto
解决办法是将include/google文件夹移动到指定了环境变量的文件夹
然后就可以在cmd中输入protoc,他应该会像配置Java环境那样有一大长串
准备工作做好了,我们来找找这个万恶之源,address.protoc
然后把它拖到Rider查看(报错可以不用管,因为我们是强行直接读取的文件,它所依赖的包或者文件并没有被我们当前的工程所涵盖,所以会报错)
发现比较难懂
package 对应于c#中的命名空间
required 对应类的属性 (该变量必填)
optional 创建一个具有默认值的属性,通过[default=XXX]设置默认值,不添加默认为空置。如string默认为“”,int默认为0
enum 创建枚举
message 创建自定义类或内部类
repeated 对应list列表数据
有同学发现了,明明package才代表命名空间,但我们的AdressBook类的命名空间却是
为什么呢?正好,我们做个实验,顺便学习一下使用protoc.exe生成cs文件
我们把这一行注释
由于我的addressbook.proto在D:\protobuf-csharp-3.7.0-rc-2\protobuf-3.7.0-rc-2\examples
所以我的命令行输入如下(注意,第三句的/与a之间有空格,不然会出错)
d:
cd D:\protobuf-csharp-3.7.0-rc-2\protobuf-3.7.0-rc-2\examples
protoc --csharp_out=./ addressbook.proto
然后我们就发现生成了AddressBook.cs文件
至于它的命名空间,是我们的package名,tutorial(他底层把T大写了)
所以我们得出结论,是下面那行
option csharp_namespace = "Google.Protobuf.Examples.AddressBook"
把package所重写了
最后,分享给大家protobuf的常用语法
.proto类型 |
Java 类型 |
C++类型 |
备注 |
double |
double |
double |
|
float |
float |
float |
|
int32 |
int |
int32 |
使用可变长编码方式。编码负数时不够高效——如果你的字段可能含有负数,那么请使用sint32。 |
int64 |
long |
int64 |
使用可变长编码方式。编码负数时不够高效——如果你的字段可能含有负数,那么请使用sint64。 |
uint32 |
int[1] |
uint32 |
Uses variable-length encoding. |
uint64 |
long[1] | uint64 | Uses variable-length encoding. |
sint32 |
int |
int32 |
使用可变长编码方式。有符号的整型值。编码时比通常的int32高效。 |
sint64 |
long |
int64 |
使用可变长编码方式。有符号的整型值。编码时比通常的int64高效。 |
fixed32 |
int[1] |
uint32 |
总是4个字节。如果数值总是比总是比228大的话,这个类型会比uint32高效。 |
fixed64 |
long[1] |
uint64 |
总是8个字节。如果数值总是比总是比256大的话,这个类型会比uint64高效。 |
sfixed32 |
int |
int32 |
总是4个字节。 |
sfixed64 |
long |
int64 |
总是8个字节。 |
bool |
boolean |
bool |
|
string |
String |
string |
一个字符串必须是UTF-8编码或者7-bit ASCII编码的文本。 |
bytes |
ByteString |
string |
可能包含任意顺序的字节数据。 |
以及
https://blog.csdn.net/u011518120/article/details/54604615