java protostuff 好处_Protostuff详解

java protostuff 好处_Protostuff详解一、Protostuff介绍Protostuff是一个开源的、基于Java语言的序列化库,它内建支持向前向后兼容(模式演进)和验证功能。Protostuff支持的序列化格式包括:protobufprotostuffjsonsmile即二进制json,从protostuff-json模块中使用。Smile数据格式是由JacksonJSON库开发团队于2010年发布的数据格式,并在Jackson1…

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

一、Protostuff介绍

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

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

protobuf

protostuff

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

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

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

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


相关推荐

  • matlab内建函数怎么不同颜色,matlab分段函数不同颜色绘图

    matlab内建函数怎么不同颜色,matlab分段函数不同颜色绘图Matlab绘制分段函数图像functionfunc_baidu_56568133x=-200:200;y=(x0).*(x.^2+(1-x).^(1/4)-5);figure(1);plot(x,y)fh=@func_baidmatlab绘制分段函数图象k是数组,不能那样比较;逻辑与是&&;j最后应该是一个数组,不是一个数;修改如下:forx=30:1:350if0.015*x…

    2022年6月17日
    39
  • mysql datetime格式化日期(sql 日期格式)

    mysql查询记录如果有时间戳字段时,查看结果不方便,不能即时看到时间戳代表的含义,现提供mysql格式换时间函数,可以方便的看到格式化后的时间。1.DATE_FORMAT()函数用于以不同的格式显示日期/时间数据。DATE_FORMAT(date,format)format参数的格式有%a缩写星期名%b缩写月名%c月,数值%D带有英文前缀的月中的天%d月的天,数值(00-31)%e月的天,数…

    2022年4月15日
    130
  • 解决Unable to connect to Redis server: 192.168.110.1/192.168.110.1:6379[通俗易懂]

    解决Unable to connect to Redis server: 192.168.110.1/192.168.110.1:6379[通俗易懂]出现场景:springboot整合redis,启动项目时出现原因:redis的一系列配置不正确解决方案:首先在window安装redis,找到安装目录下的redis.windows.confredis.windows-service.conf1)修改protected-modeyes改为:protected-modeno2)注释掉#bin127.0.0.13…

    2022年6月5日
    275
  • springcloud feign原理_ribbon和feign实现负载均衡的原理

    springcloud feign原理_ribbon和feign实现负载均衡的原理Feign是什么?简单来说,feign是用在微服务中,各个微服务间的调用。它是通过声明式的方式来定义接口,而不用实现接口。接口的实现由它通过springbean的动态注册来实现的。fei…

    2022年10月4日
    0
  • C语言学生成绩管理系统详解[通俗易懂]

    文章目录一、系统概述二、数据类型三、自定义函数说明四、运行界面五、源代码源代码请直接跳到最后引言:最近写了C语言的大作业,感觉做得还行,记录一下,给后人一些参考,给自己留更深印象方便后续改进!不知道发了这篇博客会不会认为我抄袭…害怕.jpg一、系统概述使用单向链表和文件作为基本数据结构,设计一个学生成绩管理程序,管理某学校学生成绩。[1]插入数据[2]修改对应数据项的数据[3]删除对应学号的信息[4]查找某学号的信息[5]查找不及格学生[6]对学生成绩进行排名[7]统计各个等级的学生

    2022年4月11日
    52
  • jsp:include引入jsp文件的时候(如果被包含的文件存在js文件),不要用相对路径

    jsp:include引入jsp文件的时候(如果被包含的文件存在js文件),不要用相对路径先回忆一下二者的区别(对于此篇文章而言,二者在用法上没有区别) jsp:include是先编译一下included.jsp文件,然后再包含 先编译,后包含@ include是先把文件包含就来,然后统一编译 先包含,后编译  今天下午想把jQuery集成到项目中,发现怎么样都会出问题。原因就是路径问题。在集成时,我的思路是…

    2022年6月13日
    25

发表回复

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

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