zoukankan      html  css  js  c++  java
  • Protostuff具体解释

    Protostuff具体解释

    作者:chszs,未经博主同意不得转载。

    经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs

    一、Protostuff介绍

    Protostuff是一个开源的、基于Java语言的序列化库,它内建支持向前向后兼容(模式演进)和验证功能。

    Protostuff支持的序列化格式包括:

    • protobuf
    • protostuff
    • graph
      即序列化对象图,即带循环引用的protostuff。详见:http://www.protostuff.io/documentation/object-graphs/
    • json
    • smile
      即二进制json。从protostuff-json模块中使用。

      Smile数据格式是由Jackson JSON库开发团队于2010年公布的数据格式。并在Jackson 1.6版本号開始使用此格式。


      Smile格式规范:http://wiki.fasterxml.com/SmileFormatSpec
      与此类似的有BSON格式。见:http://bsonspec.org/
      要注意一点。Smile数据格式和BSON数据格式是互不兼容的。比方BSON定义了日期类型,而Smile没有日期类型。并且,有时候BSON数据格式占用的空间比原生JSON占用的空间很多其它。

      所以。对于二进制JSON来说,Smile才是更好的选择。
      能够參考通用二进制JSON规范《Universal Binary JSON Specification》:http://ubjson.org/

    • xml
    • yaml
      仅仅支持序列化
    • kvp
      即二进制的uwsgi头部(Header)。详见:http://projects.unbit.it/uwsgi

    二、Protostuff特征

    1、支持protostuff-compiler产生的消息

    2、支持现有的POJO

    3、支持现有的protoc产生的Java消息

    4、与各种移动平台的互操作能力(Android、Kindle、j2me)

    5、支持转码

    三、Protostuff的模块

    1、protostuff-api模块

    面向消息和POJO(message/pojo)的序列化API,内建了对模式演进的支持。
    能够与现有对象一起工作,仅仅需加入模式Schema。能够通过代码生成、在执行时使用protostuff-runtime生成、或者是手写产生。

    2、protostuff-core模块

    绑定了三种二进制格式:protostuff、graph、protobuf。

    protostuff与protobuf的差别:
    1)protobuf有一个名为“group”的编码类型域。而protostuff使用它作为嵌套的消息。


    2)protostuff能够使用尾部界定符来处理消息流(Stream)。
    3)protostuff的一级类在本地格式中支持循环引用。

    3、protostuff-runtime模块

    自己主动启用现有的POJO序列化/反序列化为各种格式。
    可使用执行时序列化策略,w/c通过系统属性进行配置。


    依赖于protostuff-API和protostuff-collectionschema。

    4、protostuff-json模块

    面向消息或POJO的JSON序列化/反序列化。
    面向标量域的向前向后兼容。
    依赖于protostuff-api、jackson-core-asl-1.7.9。假设使用了Smile格式,还需jackson-smile-1.7.9。

    5、protostuff-parser模块

    使用了ANTLR V3、面向.proto文件的词法/语法解析器。


    供protostuff-compiler使用。

    6、protostuff-compiler模块

    面向.proto源文件的编译器。


    能够从文件系统、类路径或从网络HTTP URL中加载.proto源文件。


    可使用參数-Dproto_path=$path告诉编译器从哪里加载源文件。
    可扩展/定制编译的输出。
    要编译源文件,执行命令:
    java -jar protostuff-compiler-1.0.9.jar
    protostuff.properties属性文件定义:

    modules = foo
    foo.source = path/to/your/foo.proto
    #java_bean, gwt_overlay, java_v2protoc_schema
    foo.output = java_bean
    foo.outputDir = generated
    foo.options = some_key,key:value,another_key
    

    依赖于protostuff-parser模块。

    7、protostuff-me模块

    对于j2me应用,无需外部依赖
    与api模块和core模块结合一起使用,去掉了Java泛型支持。

    四、模式Schema

    Schema包括:
    1)对象进行序列化的逻辑
    2)对象进行反序列化的逻辑
    3)对象必填字段的验证
    4)对象字段名称到字段编号的映射
    5)对象的实例化

    对于现有的对象。必须使用protostuff-runtime来生成Schema——能够通过反射来缓存、使用Schema。
    开发人员更喜欢自己定义Schema,比方对必填字段的验证等,那么能够手动编码。

  • 相关阅读:
    JS iframe给父类传值
    JS table分页
    JS 日历
    C# 创建文件夹
    post数据html数据获取危险处理办法
    SQL日期数据格式的处理
    sqlserver中计算结果保留小数
    页面元素的定位:getBoundingClientRect()和document.documentElement.scrollTop
    正则表达式 匹配中文,英文字母和数字及_的写法!同时控制长度
    GridPanel分页条插件
  • 原文地址:https://www.cnblogs.com/slgkaifa/p/7212089.html
Copyright © 2011-2022 走看看