Protostuff 介绍

Protostuff 介绍2019独角兽企业重金招聘Python工程师标准>>>…

大家好,又见面了,我是你们的朋友全栈君。

1 简介**

Protostuff是一个开源的、基于Java语言的序列化库,
它内建支持向前向后兼容(模式演进)和验证功能。
Protostuff支持的序列化格式包括:
protobuf protostuff graph 即序列化对象图,即带循环引用的protostuff。
详见:http://www.protostuff.io/documentation/object-graphs/
json smile 即二进制json,从protostuff-json模块中使用。Smile数据格式是由Jackson
JSON库开发团队于2010年发布的数据格式,并在Jackson 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
2 特征
1、支持protostuff-compiler产生的消息
2、支持现有的POJO
3、支持现有的protoc产生的Java消息
4、与各种移动平台的互操作能力(Android、Kindle、j2me)
5、支持转码
3 模块
3.1 protostuff-api模块
面向消息和POJO(message/pojo)的序列化API,内建了对模式演进的支持。
可以与现有对象一起工作,只需添加模式Schema。可以通过代码生成、
在运行时使用protostuff-runtime生成、或者是手写产生。
3.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。
3.3 protostuff-json模块
面向消息或POJO的JSON序列化/反序列化。
面向标量域的向前向后兼容。
依赖于protostuff-api、jackson-core-asl-7.9。如果使用了Smile格式,还需jackson-smile-7.9。
3.4 protostuff-parser模块
使用了ANTLR V3、面向.proto文件的词法/语法解析器。
供protostuff-compiler使用。
3.5 protostuff-compiler模块
面向.proto源文件的编译器。
可以从文件系统、类路径或从网络HTTP URL中载入.proto源文件。
可使用参数-Dproto_path=$path告诉编译器从哪里载入源文件。
可扩展/定制编译的输出。
要编译源文件,执行命令:
java -jar protostuff-compiler-0.9.jar
protostuff.properties属性文件定义:
modules = foo
foo.source = path/to/your/foo.proto
foo.output = java_bean
foo.outputDir = generated
foo.options = some_key,key:value,another_key
依赖于protostuff-parser模块。
7、protostuff-me模块
对于j2me应用,无需外部依赖
与api模块和core模块结合一起使用,去掉了Java泛型支持。
4 模式
Schema包含:
1)对象进行序列化的逻辑
2)对象进行反序列化的逻辑
3)对象必填字段的验证
4)对象字段名称到字段编号的映射
5)对象的实例化
对于现有的对象,必须使用protostuff-runtime来生成Schema——可以通过反射来缓存、使用Schema。
开发者更喜欢自定义Schema,比如对必填字段的验证等,那么可以手动编码

转载于:https://my.oschina.net/yaukie/blog/753726

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/142953.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 如何解决win7开机提示未能连接一个Windows服务「建议收藏」

    如何解决win7开机提示未能连接一个Windows服务「建议收藏」1.以安全模式打开电脑;2.打开运行菜单,在运行对话框中输入CMD,回车打开命令对话框;3.然后在命令对话框中输入“NETSHWINSOCKRESETCATALOG”命令,点击Enter;4.重启电脑。

    2022年5月15日
    51
  • .net mvc5_mvc工作流程

    .net mvc5_mvc工作流程作者:josh-jw介绍我们可以在web页面用HTML表格元素定义WebGrid显示数据,它以非常简单的方式呈现表格数据,支持自定义格式列,分页,排序,并通过AJAX异步更新。WebGrid主要属性:Source-数据来自哪里。通常情况下,通过controlleraction传递modelDefaultSort-定义如何将数据排序。只要在这里提供列名。RowsPerPage-每页表格显示…

    2022年10月1日
    3
  • linux下解压rar压缩文件

    linux下解压rar压缩文件在windows下我们压缩解压文件通常后缀为rar,在linux下我们压缩解压文件通常后缀为tar默认在linux下我们不能解压压缩rar文件我们可以下载rarlinux安装包实现解压压缩后缀为rar的包下载地址:WinRARarchiver,apowerfultooltoprocessRARandZIPfiles安装~]#wgethttps://www.rarlab.com/rar/rarlinux-x64-610.tar.gz~]#tar-zxv.

    2022年7月11日
    16
  • C语言运算符优先级(超详细)「建议收藏」

    C语言运算符优先级(超详细)「建议收藏」转自: http://blog.csdn.net/huangblog/article/details/8271791每当想找哪个运算符优先级高时,很多时候总是想找的就没有,真让人气愤!现在,终于有个我个人觉得非常全的,分享给大家,欢迎拍砖!C语言运算符优先级优先级运算符名称或含义使用

    2022年10月5日
    2
  • git 修改远程仓库地址[通俗易懂]

    一、Git修改远程仓库地址方法:1.直接修改config文件2.使用命令修改远程仓库地址gitremote查看所有远程仓库,gitremotexxx查看指定远程仓库地址gitremoteset-urloriginhttp:/xxxx/john/git_test.git3.删除仓库,添加新仓库1.gitremote查看所有远程仓库,gitremotexxx查看指定远程仓库地址2.gitremotermorigin…

    2022年4月15日
    40
  • php错误处理_MSVCP120.dll

    php错误处理_MSVCP120.dll当您搜索“phpMSVCR110.dll”时,由于此问题的链接显示在返回结果的最上方(更不用说它的浏览量已超过10万,并且还在不断增长),因此,这里有一些其他说明,在您寻求以下内容时可能会派上用场解决MSVCR110.dll错误…答案中描述的方法不仅对MSVCR110.dll情况有效,而且在寻找其他版本(例如较新的MSVCR71.dll)时也适用,并且我将答案更新为包括VC15,即使它不…

    2025年7月27日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号