ProtoBuffer

序列化数据的要求

  1. 效率  时间空间
  2. 多语言相互操作
  3. 使用方便

ProtoBuffer 使用:

  1. Designing objects

    Person:
    Id
    Name
    Age
    Email
    Phone(s)
    

      

  2. Describing objects

    Person:
    required int32 id
    required string name
    optional string email
    repeated string phone
  3. Compiling the description

    package tutorial;
    option java_package  = "com.example.tutorial";
    option java_outer_classname  = "AddressBookProtos";
    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;
    }
    protoc --java_out=$DST_DIR addressbook.proto
  4. Obtaining the generated source-code
  5. Importing objects into your project
  6. Instantiating objects

    Person  john = Person.newBuilder()
    .setId(12345)
    .setName
    .setEmail
    .addPhone(Person.PhoneNumber.newBuilder()
    .setNumber("+351 999 999 999")
    .setType(Person.PhoneType.HOME)
    .build())
    .build();
  7. Using objects

    // Writing data to a file
    FileOutputStream  aOutput  = new FileOutputStream("theFilename")
    Person  aPerson = Person.newBuilder.set()....   //instance  a Person
    aPerson.writeTo(aOutput);
    aOutput.close();
    // Reading data from a file
    Person  aPerson = Person.parseFrom(new FileInputStream("theFilename"))
    // Do something with the received Person

ProtoBuffer 重点在

  1. Efficiency (space and time)   效率 (空间和时间)
  2. Language interoperability     多语言互操作性
  3. Usability                             方便使用

其它解决方案

  1. Avro (http://avro.apache.org/)
  2. Thrift (http://thrift.apache.org/)
  3. Kryo (https://github.com/EsotericSoftware/kryo)
时间: 2024-10-10 07:24:24

ProtoBuffer的相关文章

protobuffer php使用

protobuffer是google推出的一种数据传的方式,具体压缩,体积小的特点 protobuffer本身不支持php,若要把.proto文件转化为php支持的文件,需要使用第三方的程序 allegro/php-protobuf 或 drslump/Protobuf-PHP 参考 http://yueqian.sinaapp.com/a/52.html http://hello1010.com/php-protobuf 使用drslump/Protobuf-PHP 一.下载并安装protoc

编译gRPC Go版本使用的 ProtoBuffer 文件

本篇文章主要解决mac下安装ProtoBuffer,编译go版本gRPC用的.proto文件 安装 protoc 注意,gRPC 需要用到 proto3, 而目前 Release 的版本是 2.6.1, 所以我们需要去下载源码并编译. https://developers.google.com/protocol-buffers/docs/downloads?hl=zh-cn protobuf 的源码在: https://github.com/google/protobuf Mac的特有前置安装需

unity中使用protobuffer作为网络通讯封包协议的实现和流程

一 使用的库 protobuffer 有两个c#实现,其中protobuffer-csharp 这个版本 比较适合跨语言开发,这个版本模仿java 实现:在ios上面,我们要使用 lite 版本,同时需要修改代码 却掉 pluginregistry 功能,否则无法在ios上面 使用: ios平台的mono只支持aot. 阉割后的protobuffer -csharp代码: 待续(后续提供) 二 协议生成流程实现 使用脚本自动生成 java 以及 c# 版本的协议代码 使用svn external

thrift与protobuffer的区别

thrift由facebook出品,protobuffer由google出品: 下面对比一下这两个的区别.参考:http://zhidao.baidu.com/link?url=yNLBeHhWokfwB677UZHoyv4vLyPOZEEQypUMiX__YIhp5E7UmpvIWTArKPMab32xj5gkRo4a6CXoZ1nxore82kXyOzfXdaRRhOAPynxYmB7 1)Thrift: 支持的语言更广泛一些c++, java, python,ruby, csharp, h

基于activeMQ和protoBuffer的java消息中间件的测试

前段时间刚测试的一个项目,其中两个系统之间需要实现增量数量的读取更新,即A系统获取到增量数据后通知B系统获取新增数据并进行后续的处理,为达到这一目标,最终设计为A数据存在增量数据至activeMQ,B系统从activeMQ中获取数据,为此,开发童鞋需实现一个通用的客户端工具包,方便两个系统发送和读取消息. 测试思路: 根据项目情况分析,该消息中间件的测试主要关注点是"生产者"."消费者"两者针对消息的处理是否正常,即: 1.生产者能否将消息正确写入activeMQ

基于.NET CORE微服务框架 -谈谈surging 的messagepack、protobuffer、json.net 序列化

1.前言 surging内部使用的是高性能RPC远程服务调用,如果用json.net序列化肯定性能上达不到最优,所以后面扩展了protobuf,messagepack序列化组件,以支持RPC二进制传输. 在这里需要感谢白纸无字Zonciu,新增了messagepack序列化,让surging 性能上跨了一大步.此篇文章我们来谈谈messagepack.protobuffer.json.net ,并且性能做下对比 开源地址:https://github.com/dotnetcore/surging

【Golang】如何不反序列化为前提的情况下,修改ProtoBuffer某个Tag的值

当你从客户端接收到一串序列化后的数据,你需要 - 修改其中某一个标签的值,然后把它传递到真正的业务数据,这样每个业务模块(微服务)就不需要和公共授权服务打交道了. - 因为传递的数据的长度,类型甚至是新的字段的新增的造成不稳定,因此 network->originBytes - > Marshal() -> Object -> Unmarshal()->newBytes->Logic Service 会造成很大的损耗 因此设想是否考虑一个优化方式: network-&g

Protobuffer教程

目录 什么是protobuffer? protobuffer是如何工作的? 为什么不用xml? 1.什么是protobuffer? protobuffer是一种灵活,高效,自动化的机制,用于序列化结构化数据 - 想想XML,但更小,更快,更简单.您可以定义数据的结构化时间,然后可以使用特殊生成的源代码轻松地在各种数据流中使用各种语言编写和读取结构化数据.您甚至可以更新数据结构,而不会破坏根据“旧”格式编译的已部署程序. 2.protobuffer是如何工作的? 您可以通过在.proto文件中定义

【ProtoBuffer】windows上安装ProtoBuffer3.x (附已编译资源)

百度了很久,所介绍的方法很多都不适用,搜出来的文章都是找到vs的工程文件然后balabala...,但因为gihub上的最新版本protobuf3.3.0,是不带vs的工程文件了,官方的readme感觉有点偏Linux平台,我卡了很久. 后来一想,让搜索引擎的结果只呈现近1年的结果,直接就有了.需要自己用CMAKE工具进行MAKE生成VS工程文件,过程其实并不难. 以下是原文: 一.下载protobuf 下载地址:https://github.com/google/protobuf/releas