zoukankan      html  css  js  c++  java
  • protobuf

    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
    hadoop大数据相关
  • 相关阅读:
    Redhat安装配置VNC服务器
    Linux下如何强制中断一个程序的执行?
    Linux上怎么快速删除一个目录
    Linux两台服务器上互传文件
    Linux压缩解压命令
    新Linux系统配置yum源
    从零开始,搭建博客系统MVC5+EF6搭建框架(1),EF Code frist、实现泛型数据仓储以及业务逻辑
    [转]关于有偿提供拼图响应式后台的通知
    ASP.NET MVC post请求接收参数的三种方式
    ASP.NET MVC中获取URL地址参数的两种写法
  • 原文地址:https://www.cnblogs.com/zhangzl/p/4276566.html
Copyright © 2011-2022 走看看