首页 > 其他 > 详细

protobuf

时间:2015-02-06 11:03:51      阅读:409      评论:0      收藏:0      [点我收藏+]
from:http://blog.163.com/typhoon_1986/blog/static/678877802011910102113393/ 序列化王道之protobuf 开发某些分布式系统时,常用的功能之一就是要在进程之间交互数据,当然,你可以用管道,shared memory,嵌入式数据库, in memory db等。但使用这些方式传送数据通常会遇到 某种语言的数据结构或对象的传输。这种不能直接传输的数据往往需要通过 概述 开发某些分布式系统时,常用的功能之一就是要在进程之间交互数据,当然,你可以用管道,shared memory,嵌入式数据库, in memory db等。但使用这些方式传送数据通常会遇到 某种语言的数据结构或对象的传输。这种不能直接传输的数据往往需要通过一种“协议”进行编码解码,序列化就是一种方式。而序列化的方法很多,如python的pickle,json, kryo等。google的protobuf是我认为最好的一种序列化协议之一。 本人主要使用python和c/c++, 而protobuf对这两种语言都做了实现: python官方入门教程(英文): http://code.google.com/apis/protocolbuffers/docs/pythontutorial.html python官方API文档 http://code.google.com/apis/protocolbuffers/docs/reference/python/index.html python如何使用: 1. 定义数据的格式(schema),建立文件addressbook.proto: package tutorial; message Person { required string name = 1; required int32 id = 2; optional string email = 3; enum PhoneType { MOBILE = 0; HOME = 1; WORK = 2; } message PhoneNumber { required string number = 1; optional PhoneType type = 2 [default = HOME]; } repeated PhoneNumber phone = 4; } message AddressBook { repeated Person person = 1; } 2. 编译.proto文件: protoc -I=$SRC_DIR --python_out=$DST_DIR $SRC_DIR/addressbook.proto 3. 使用这种格式的数据 两个主要的函数分别是: SerializeToString() 序列化数据对象 ParseFromString() 反序列化 编写如下的测试用的python代码: import addressbook_pb2 person = addressbook_pb2.Person() person.id = 1234 person.name = "John Doe" person.email = "jdoe@example.com" phone = person.phone.add() phone.number = "555-4321" phone.type = addressbook_pb2.Person.HOME print person str = person.SerializeToString() print len(str) pread = addressbook_pb2.Person() pread.ParseFromString(str) print pread #!/usr/bin/env python import addressbook_pb2 person = addressbook_pb2.Person() person.id = 1234 person.name = "John Doe" person.email = "jdoe@example.com" phone = person.phone.add() phone.number = "555-4321" phone.type = addressbook_pb2.Person.HOME print person str = person.SerializeToString() print len(str) pread = addressbook_pb2.Person() pread.ParseFromString(str) print pread

protobuf

原文:http://www.cnblogs.com/zhangzl/p/4276566.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!