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,比方对必填字段的验证等,那么能够手动编码。

Protostuff具体解释的更多相关文章

  1. ZIP压缩算法详细分析及解压实例解释

    最近自己实现了一个ZIP压缩数据的解压程序,觉得有必要把ZIP压缩格式进行一下详细总结,数据压缩是一门通信原理和计算机科学都会涉及到的学科,在通信原理中,一般称为信源编码,在计算机科学里,一般称为数据 ...

  2. 说说BPM数据表和日志表中几个状态字段的详细解释

    有个客户说需要根据这些字段的值作为判断条件做一些定制化需求,所以需要知道这些字段的名词解释,以及里面存储的值具体代表什么意思 我只好为你们整理奉上这些了! Open Work Sheet  0 Sav ...

  3. 【完全开源】知乎日报UWP版:项目结构说明、关键源代码解释

    目录 说明 项目结构 关键代码 演示视频 说明 上一篇博客将源码放出来了,但是并没有做过多的介绍,所以如果自己硬看可能需要花费很长的时间,尤其这些代码并不是自己写的.项目不算复杂但是也不算简单,这篇文 ...

  4. nodejs、npm、grunt——名词解释

    最近着手开发一个新项目,打算从工程化的角度整理一套自己的前端开发.发布体系. grunt这些工具,之前别人用我也用,并没有认真想过它们的前世今生,正好趁着这个机会,我来理一理目前业界比较流行这些工具的 ...

  5. HTTP各状态码解释

      状态码 含义 100 客户端应当继续发送请求.这个临时响应是用来通知客户端它的部分请求已经被服务器接收,且仍未被拒绝.客户端应当继续发送请求的剩余部分,或者如果请求已经完成,忽略这个响应.服务器必 ...

  6. JavaScript中‘this’关键词的优雅解释

    本文转载自:众成翻译 译者:MinweiShen 链接:http://www.zcfy.cc/article/901 原文:https://rainsoft.io/gentle-explanation ...

  7. XML简介与CDATA解释

    简介XML 是一种受到广泛支持的 Internet 标准,用于以一种特殊的方式编码结构化数据.实际上,以 XML 编码的数据可以通过任何编程语言解码,人们甚至可以使用标准的文本编辑器来阅读或编写 XM ...

  8. free-简单明了解释清楚怎么看内存使用

    free命令可以用来查看系统内存使用情况.我一般习惯-m参数以MB的方式查看 [root@localhost ~]# free -m total used free shared buffers ca ...

  9. .htaccess语法之RewriteCond与RewriteRule指令格式详细解释

    htaccess语法之RewriteCond与RewriteRule指令格式详细解释 (2012-11-09 18:09:08) 转载▼ 标签:  htaccess it 分类: 网络 上文htacc ...

随机推荐

  1. iOS开发中六种手势识别

    iOS开发中手势识别有六种: 轻击手势(TapGestureRecognizer), 轻扫手势 (SwipeGestureRecognizer), 长按手势(LongPressGestureRecog ...

  2. ubuntu 安装tomcat<服务器>

    一.下载tomcat 可以先下载到本地,然后ftp到服务器 官方 Apache Tomcat 的下载页面(下面的链接是apache自己的镜像服务器的地址,不同网络连接的话,apache会给出不同的镜像 ...

  3. 学习 WebService 第二步:知识准备——WSDL文件解析

    原文地址:https://www.cnblogs.com/yzw23333/p/7245104.html Web service中一个 WSDL 对应一个 web service地址. 可以想象成一个 ...

  4. mysql explain字段意思解释

    mysql explain字段意思解释 explain包含id.select_type.table.type.possible_keys.key.key_len.ref.rows.extra字段 id ...

  5. poj 1637 混合图欧拉回路 学习笔记

    题目大意 求混合图是否存在欧拉回路 做法 有向边我们只有增加入度出度 对于无向边,我们给它设定一个初始方向 如果不能满足|入度-出度|为偶数,无解 然后在网络流图中, 设设定方向的反向连一条边,表示反 ...

  6. 【POJ3321】Apple Tree(DFS序,树状数组)

    题意:给一棵n个节点的树,每个节点开始有一个苹果,m次操作 1.将某个结点的苹果数异或 1 2.查询一棵子树内的苹果数 n,m<=100000   思路:最近一段时间在思考树上统计问题的算法 发 ...

  7. Unity中LoadLevel与LoadLevelAsync的区别

    1.LoadLevel 同步加载 写法:Application.LoadLevel(“name”); 优点:读取场景使用同步的方法就可以,因为是同步方法所以读取的速度是最快的,也不用更新界面,因为同步 ...

  8. unix网络编程第四章----基于TCP套接字编程

    为了执行网络I/O操作.进程必须做的第一件事情就是调用Socket函数.指定期待的通信协议 #include<sys/socket.h> int socket(int family,int ...

  9. 首次远程安装 GlassFish 后以远程 Web 方式访问其后台管理系统出现错误的解决方法(修订)

    首次远程安装 GlassFish 服务后,如果以远程 Web 方式访问其后台管理系统,会提示 Secure Admin must be enabled to access the DAS remote ...

  10. LeetCode OJ——Text Justification

    http://oj.leetcode.com/problems/text-justification/ 编译代码要看warnings!它提供了可能出问题的情况,比如类型转换上unsigned int ...