专栏首页readmeprotobuf helloworld
原创

protobuf helloworld

Protocol buffers are Google's language-neutral, platform-neutral, extensible mechanism for serializing structured data – think XML, but smaller, faster, and simpler. You define how you want your data to be structured once, then you can use special generated source code to easily write and read your structured data to and from a variety of data streams and using a variety of languages.

谷歌出的一种语言无关、平台无关、可扩展的序列化结构数据的方法,它可用于(数据)通信协议、数据存储等。灵活,高效,自动化机制的结构数据序列化方法-可类比 XML,但是比 XML 更小(3 ~ 10倍)、更快(20 ~ 100倍)、更为简单。比JSON也小,最简单的理解就是健可以不用重复,通过定义数据的结构,然后使用特殊生成的源代码轻松的在各种数据流中使用各种语言进行编写和读取结构数据。甚至可以更新数据结构,而不破坏由旧数据结构编译的已部署程序。

  • Define message formats in a .proto file. / 定义数据格式
  • Use the protocol buffer compiler. / 编译文件成不同语言的实现
  • Use the Python protocol buffer API to write and read messages. / 调用所需要的库写和读

1. Define data format (t1d.proto):

syntax = "proto3";

message Device {
	string name = 1;
}

2. Compile file:

https://developers.google.com/protocol-buffers/docs/downloads

https://github.com/protocolbuffers/protobuf

# NETWORK issue -> proxy
pip install protobuf
brew install protobuf
protoc --version

# make (option in mac)
./autogen.sh && ./configure && make
brew install autoconf && brew install automake
make check
sudo make install
which protoc

# Compile now
# protoc -I=$SRC_DIR --python_out=$DST_DIR $SRC_DIR/t1d.proto
# protoc --proto_path=./ --python_out=./ my_example.proto
protoc -I=./ --python_out=./data/ t1d.proto

3. Runtime write and read:

import t1d_pb2

my_device = t1d_pb2.Device(name='IHU!')

with open('my_device.pb', 'wb') as f:
    f.write(my_device.SerializeToString())

with open('my_device.pb', 'rb') as f:
    new_device = t1d_pb2.Device().FromString(f.read())

  • Javascript version
protoc --js_out=import_style=commonjs,binary:. XXX.proto
npm install -g require
npm install -g browserify
npm install google-protobuf
var address = require('./address_pb');
module.exports = {
    DataProto: address
}
browserify exports.js -o  address_main.js
  • Java version

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • jwt helloworld

    JSON Web Token (JWT) is an open standard (RFC 7519) that defines a compact and s...

    readme
  • nginx + uwsgi + django configration

    readme
  • Socket 套接字协议

    A network socket is an internal endpoint for sending or receiving data within a ...

    readme
  • 浅入深出Vue:事件处理

    在前端开发中,经常要面对各种表单、按钮。而这里面就住着一个事件:点击 (click)。

    若羽
  • Linux CentOS 7.X 如何修改内核启动默认顺序

    我们知道,centos 6.x是通过/etc/grub.conf就行内核启动顺序修改的,而且比较直观查看。但centos 7的系统和6就不一样了,是通过grub...

    拓荒者
  • 11个 常见UI/UX设计师调查问卷分析

    作为专业人员,设计出优秀的作品是UI/UX设计师必备的技能,同样重要的是良好的沟通能力。进一步来讲,提出正确的问题也是作为设计师的技能之一。

    奔跑的小鹿
  • 2020年的5个云计算发展趋势

    2020年云计算市场竞争将更加激烈,供应商需要了解企业在云应用中的实际情况。随着云计算供应商将注意力转向跨行业的定制解决方案,云计算技术正变得越来越专业。与建筑...

    静一
  • HyperLedger Fabric 1.0 智能合约开发-数字货币发行和管理

    该智能合约实现一个简单的商业应用案例,即数字货币的发行与转账。在这之中一共分为三种角色:中央银行,商业银行,企业。其中中央银行可以发行一定数量的货币,企业之间可...

    用户2909867
  • FPGA用户用例提案

    哪些FPGA(现场可编程门阵列)可以给出,将FPGA资源作为PCI设备虚拟机加速器的所有准备工作,提供给系统,是一个手动行为。

    后端云
  • Android虚拟机的JIT编译器

    最近参加了华为方舟的Workshop,从编译到Runtime都有了一些体会,并且对于虚拟机的运行也有了一些了解。

    None_Ling

扫码关注云+社区

领取腾讯云代金券