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,比方对必填字段的验证等,那么能够手动编码。
Protostuff具体解释的更多相关文章
- ZIP压缩算法详细分析及解压实例解释
最近自己实现了一个ZIP压缩数据的解压程序,觉得有必要把ZIP压缩格式进行一下详细总结,数据压缩是一门通信原理和计算机科学都会涉及到的学科,在通信原理中,一般称为信源编码,在计算机科学里,一般称为数据 ...
- 说说BPM数据表和日志表中几个状态字段的详细解释
有个客户说需要根据这些字段的值作为判断条件做一些定制化需求,所以需要知道这些字段的名词解释,以及里面存储的值具体代表什么意思 我只好为你们整理奉上这些了! Open Work Sheet 0 Sav ...
- 【完全开源】知乎日报UWP版:项目结构说明、关键源代码解释
目录 说明 项目结构 关键代码 演示视频 说明 上一篇博客将源码放出来了,但是并没有做过多的介绍,所以如果自己硬看可能需要花费很长的时间,尤其这些代码并不是自己写的.项目不算复杂但是也不算简单,这篇文 ...
- nodejs、npm、grunt——名词解释
最近着手开发一个新项目,打算从工程化的角度整理一套自己的前端开发.发布体系. grunt这些工具,之前别人用我也用,并没有认真想过它们的前世今生,正好趁着这个机会,我来理一理目前业界比较流行这些工具的 ...
- HTTP各状态码解释
状态码 含义 100 客户端应当继续发送请求.这个临时响应是用来通知客户端它的部分请求已经被服务器接收,且仍未被拒绝.客户端应当继续发送请求的剩余部分,或者如果请求已经完成,忽略这个响应.服务器必 ...
- JavaScript中‘this’关键词的优雅解释
本文转载自:众成翻译 译者:MinweiShen 链接:http://www.zcfy.cc/article/901 原文:https://rainsoft.io/gentle-explanation ...
- XML简介与CDATA解释
简介XML 是一种受到广泛支持的 Internet 标准,用于以一种特殊的方式编码结构化数据.实际上,以 XML 编码的数据可以通过任何编程语言解码,人们甚至可以使用标准的文本编辑器来阅读或编写 XM ...
- free-简单明了解释清楚怎么看内存使用
free命令可以用来查看系统内存使用情况.我一般习惯-m参数以MB的方式查看 [root@localhost ~]# free -m total used free shared buffers ca ...
- .htaccess语法之RewriteCond与RewriteRule指令格式详细解释
htaccess语法之RewriteCond与RewriteRule指令格式详细解释 (2012-11-09 18:09:08) 转载▼ 标签: htaccess it 分类: 网络 上文htacc ...
随机推荐
- hihoCoder #1656 前后缀查询
题目大意 给定 $n$($n\le 50000$) 个由小写英文字母构成的字符串,每个串的长度不超过 10,每个串有一个权值 $v$ ($1\le v\le 100000$). 回答 $m$($m\l ...
- [luoguP3302] [SDOI2013]森林(主席树 + 启发式合并 + lca)
传送门 显然树上第k大直接主席树 如果连边的话,我们重构小的那一棵,连到另一棵上. 说起来简单,调了我一晚上. 总的来说3个错误: 1.离散化写错位置写到了后面 2."="写成了& ...
- bzoj1566【Noi2009】管道取珠
题意:http://www.lydsy.com/JudgeOnline/problem.php?id=1566 两个栈不断pop,共C(n+m,n)种,ai表示每个相同序列的方案数,求∑(ai^2) ...
- bzoj 4295 [PA2015]Hazard 贪心,暴力
[PA2015]Hazard Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 69 Solved: 19[Submit][Status][Discus ...
- Atcoder CODE FESTIVAL 2017 qual B D - 101 to 010 dp
题目链接 题意 对于一个\(01\)串,如果其中存在子串\(101\),则可以将它变成\(010\). 问最多能进行多少次这样的操作. 思路 官方题解 转化 倒过来考虑. 考虑,最终得到的串中的\(' ...
- poj 1410 Intersection 线段相交
题目链接 题意 判断线段和矩形是否有交点(矩形的范围是四条边及内部). 思路 判断线段和矩形的四条边有无交点 && 线段是否在矩形内. 注意第二个条件. Code #include & ...
- Perl语言入门--2--perl的运算符
一.算数运算符 **:是幂 结果不能超过数的范围 当指数为小数时 底数不能为负数 %:取余数 两边的操作数为整数,如果不是则要截取,把所有的小数部分去掉 注意:当一个字符串参加运算,需要转化为整数时 ...
- Careercup | Chapter 2
链表的题里面,快慢指针.双指针用得很多. 2.1 Write code to remove duplicates from an unsorted linked list.FOLLOW UPHow w ...
- 关于udo3d双目相机的嵌入式板子系统重装
遇到的问题: 1.下载压缩文件(.rar):在linux下下载一会就会停止 原因:linux下不支持.rar文件的下载,在windows下载即可 2.在windows下解压文件,结果为镜像文件(.im ...
- Nginx+keepalived双机热备(主主模式)
IP说明: master机器(master-node):10.0.0.5/172.16.1.5 VIP1:10.0.0.3slave机器(slave-node): 10.0.0.6/172.16. ...