zoukankan      html  css  js  c++  java
  • google protocol buffer 试用

    试用了google Protocol Buffers, 2.0.0 beta 版本,感觉还不错。
    可以去这里下 载,有linux和windows版本。
    Protocol Buffers是一个平台中立,编程语言无关的,可扩展的机制,用来将数据序列化。有点类似xml,但是比xml更小更快更简单。

    [!toc]

    如何使用

    1. 使用Protocol特定的简洁的描述语法,描述一个数据结构,如:

    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;
    }

    具体这个文件的语法请参考Protocol Buffer Language Guide

    2. 定义后这个文件之后,保存为文件phone.proto。然后使用protocol buffer提供的命令行工具protoc,从这个文件生成制定编程语言的代码,现在支持Java, C++, 和Python。

    如生成java代码的命令如下:

    protoc -I=$SRC_DIR --java_out=$DST_DIR phone.proto

    3. 得到生成java类,就可以进行对上面定义的结构化数据进行操作了。比如,数据结构person中的所有变量,都提供get和set方法。并且提供has 方法,检查这个变量是否存在。

    可以对数据进行序列化,保存到磁盘上。也可以使用Builder方法,从磁盘文件中将原有数据读出。但是序列化到磁盘中的数据是部分二进制的,不能 被人直接读取。这个不如xml方便。感觉有点像IDL,或者是多语言版的JIBX,或者是单机版的openoffice的UNO。其他PB确实像很多东 西,这个页面列举了一些。

    应用场景

    一直不是很清楚的知道这个应用场景。

    也许是一些用户,要制定一个特定的数据结构,进行数据交互和共享。那么使用这个PB Language 定义一个数据结构,然后大家从这个描述文件,各自生成自己使用的编程语言对应的代码文件,再使用这些代码对硬盘中的数据进行读写。那么,只要都遵守这个数 据文件格式,硬盘中的数据共享就实现了夸平台跨语言了。如果数据描述文件做了修改,只要遵守一定的规则,那么原有数据还是可以兼容使用的。这个就是做了一 个平台无关的文件与平台和语言相关的数据对象之间的适配转化工作,就和很多xml解析器一样,只是这个也许更简单更易用吧。

    优点

    1. 定于语言体积小,支持多种数据类型,如list,支持嵌套

    2. 定义过程中可以使用类型的概念,可以在使用的时候检查类型合法性

    3. 可以将一个描述文件,生成多种语言的代码,使数据的读写实现了语言无关。

    4. 如果描述文件修改了,只要遵守一定的规则,那原有数据结构对应的数据,也是可以被成功读取的。

    缺点

    1. 序列化后的文件不可读。

    2. 不可与xml或者json进行相互转化

    问题

    在使用中发现2个问题

    1. 不能加载库

    在ubuntu下安装,使用如下命令

    ./configure

    make check

    make install

    安装之后,运行protoc,提示找不到两个库:libprotobuf.so,libprotoc.so。原因是因为这两个库安装在了/usr /local/lib下,但是ubunut的lib路径为/usr/lib。这个可能是我事先没有制定-lib目录。不过anyway,

    解决方法:

    cd /usr/lib/

    sudo ln -s  /usr/local/lib/libprotobuf.so.0.0.0 libprotobuf.so.0

    sudo ln -s  /usr/local/lib/libprotoc.so.0.0.0 libprotoc.so.0

    2. 不能正常编译给出的sample例子(java版本)。

    首先进入$protobuf-2.0.0beta/java目录,运行mvn package,在protobuf-2.0.0beta/java/target目录下,得到protobuf-java-2.0.0beta.jar 文件,这个文件应该放在classpath中,以便在使用protoc生成的java类。但是在sample中,并没有去将这个jar文件加如 classpath中,需要手动加入。否则,运行make java,提示很多类找不到。

    解决方法:

    方法1.将protobuf-java-2.0.0beta.jar拷贝到系统的classpath下

    方法2.将protobuf-java-2.0.0beta.jar中的类完整路径内容解压缩到$protobuf- 2.0.0beta/examples中。

    http://www.cnblogs.com/huangwei/archive/2012/01/16/2324108.html

    http://wenku.baidu.com/view/c531d6330b4c2e3f57276336.html

    http://wenku.baidu.com/view/720a8e21aaea998fcc220edc.html

    http://wenku.baidu.com/view/c1e7e23c5727a5e9856a61aa.html

    http://www.cnblogs.com/wu-jian/archive/2011/02/22/1961104.html    protobuf c#应用

  • 相关阅读:
    text-overflow white-space word-break word-wrap word-spacing line-clamp 傻傻分不清楚0.0=>文本超出显示省略号/数字英文字母折行有关css 属性/显示两行,第二行省略号显示css方法
    jq 操作表单中 checkbox 全选 单选
    用 pdf.js兼容部分安卓显示PDF在线预览 时,a标签直接链接参数文件不能含中文的解决办法
    通过form实现enter事件
    小白随笔之数组的方法
    引用类型之Array
    Reset
    js常用事件
    让女朋友能懂的网络技术篇之动态代理
    图论之Dijkstra算法
  • 原文地址:https://www.cnblogs.com/vigarbuaa/p/2861917.html
Copyright © 2011-2022 走看看