protobuf

是ggle发明的,语言中立的,平台独立的,可扩展的结构化数据的序列化机制,相比xml和json,更小,更快,更简单,由于是二进制格式,不是人类可读的。

protobuf支持向后兼容,二个月前定义的.proto,昨天又新添加了field,那二个月之前的程序读昨天定义的.proto文件序列化的数据没有问题,即,老程序会忽略新的field定义。

可以支持c++,c#,java, javascript等语言,使用时用户需要定义一个.proto文件,然后用protoc编译器自动生成各个语言下的类文件,这些类文件可以用来读取和解析序列化文件。

protobuf是各个平台之间通信的一个理想方式,想想下面场景:

在桌面程序中由c#序列化一个文件,在浏览器中由javacript来呈现。

序列化数据可以作为blob存放到mysql数据库中。

协议编译器安装(Protocol Compiler Installation):

可以git clone源代码,然后编译,如果嫌麻烦,直接下载预编译的二进制文件:

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

windows下包的名称是(2018年1月份)protoc-3.5.1-win32.zip

除了二进制的编译器文件,对每个具体的语言还需要安装运行时,c#的运行时用

NuGet安装:

Install-Package Google.Protobuf -Version 3.5.1

最新版本的协议定义语言是proto3,支持c#,javascript, golang,超级棒

定义好了.proto文件,下一步生成c#的类,用到协议编译器protoc:

protoc -I=$SRC-DIR --csharp_out=$DST_DIR $SRC_DIR/addressbook.proto

直接cmd浏览到工程源代码所在目录,注意不能用powershell,语法不一样

protoc -I=./ --csharp_out=./ ./addressbook.proto

如果.proto文件不是放在当前目录下,就要费一点劲了,需要加上--proto_path:

protoc -I=./ --csharp_out=./ --proto_path=../../../HDStatic/ strokes.proto

网上有人吐槽:

 

A:\proto_dir>protoc.exe --csharp_out="A:/Output directory/" --proto_path=./ CNTK.proto

才行

c#类就生成出来了。

因为repeated field的每个元素都需要重新对tag number进行编码,所有对于

repeated类型的field最好用1到15之间的tag数,这能优化性能。

生成js文件:

..\HDFront\node_modules\.bin\pbjs -t static-module -w commonjs -o myproto.js .\strokes.proto

..\HDFront\node_modules\.bin\pbts -o myproto.d.ts myproto.js

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

novodexx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值