文档章节

Protostuff 介绍

yaukie
 yaukie
发布于 2016/09/30 11:43
字数 880
阅读 123
收藏 0
点赞 0
评论 0

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

© 著作权归作者所有

共有 人打赏支持
yaukie
粉丝 0
博文 24
码字总数 24254
作品 0
济南
程序员
简单 Netty RPC 框架--snrpc

snrpc 是一个简单的 Netty RPC 框架,使用 protostuff 1.07 作为序列化工具,使用 Netty-3.2.1 作为 NIO。 使用方式: 比如: 1. server class; interface and implementor // define an in...

stefanzhlg ⋅ 2014/11/20 ⋅ 0

一个基于Netty的RPC框架

利用netty写了一个简单的RPC框架,纯粹是为了理解RPC框架。 使用protostuff 1.07 序列化,以netty 3.2.1 网络框架。 下载地址:https://github.com/stefzhlg/snrpc ##How to use e.g. 1,ser...

stefanzhlg ⋅ 2014/12/05 ⋅ 2

序列化框架比较:kryo & hessian & Protostuff & java

序列化框架性能对比(kryo、hessian、java、protostuff) 简介: 优点 缺点 Kryo 速度快,序列化后体积小 跨语言支持较复杂 Hessian 默认支持跨语言 较慢 Protostuff 速度快,基于protobuf ...

鉴客 ⋅ 2013/03/04 ⋅ 0

几种 Java 序列化方案的性能比较

来源:https://github.com/eishay/jvm-serializers/wiki 比较结果: create ser deser total size +dfljava-built-in 62 5608 29649 35257 889 514hessian 65 3812 6708 10519 501 31......

红薯 ⋅ 2013/03/04 ⋅ 4

Protostuff 序列化

protostuff 是简化protobuf开发的java的操作工具jar 。 先看看 protobuf 的使用流程: 1.先编写proto文件格式,例如 message Person { required int32 id = 1; required string name = 2; op...

爱无痕 ⋅ 2015/11/14 ⋅ 2

各种 Java 的序列化库的性能比较测试结果

免责声明 本次测试专注于 cyclefree 数据结构的编码和解码。一些序列化程序支持循环检测/对象共享,一些序列化程序两种模型都支持,一些序列化程序包括了元数据,一些则没有,有的是跨平台的...

孔小菜 ⋅ 2015/06/02 ⋅ 4

Protostuff序列化分析

前言 最近项目中需要将业务对象直接序列化,然后存数据库;考虑到序列化、反序列化的时间以及生产文件的大小觉得Protobuf是一个很好的选择,但是Protobuf有的问题就是需要有一个.proto的描述...

ksfzhaohui ⋅ 2016/12/05 ⋅ 0

Kafka消息序列化和反序列化(下)

接上一篇:Kafka消息序列化和反序列化(上)。 有序列化就会有反序列化,反序列化的操作是在Kafka Consumer中完成的,使用起来只需要配置一下key.deserializer和value.deseriaizer。对应上面...

u013256816 ⋅ 2017/11/28 ⋅ 0

轻量级高性能 RPC 框架--HRPC

HRPC HRPC是一款基于Netty和Zookeeper设计的轻量级高性能RPC框架。 特性 采用Protostuff序列化; 高性能,负载均衡; 支持服务的注册和订阅; 支持同步及异步2种调用方式; 长连接,自动重连...

wosyingjun ⋅ 2016/09/01 ⋅ 5

shuaiqiyu/happylifeplat-tcc

happylifeplat-tcc 碧桂园旺生活平台解决分布式事务方案之tcc开源框架。基于java语言来开发(JDK1.8),支持dubbo,springcloud等rpc框架进行分布式事务。 因为文件名太长,大家在拉取代码的...

shuaiqiyu ⋅ 2017/12/21 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

用ZBLOG2.3博客写读书笔记网站能创造今日头条的辉煌吗?

最近两年,著名的自媒体网站今日头条可以说是火得一塌糊涂,虽然从目前来看也遇到了一点瓶颈,毕竟发展到了一定的规模,继续增长就更加难了,但如今的今日头条规模和流量已经非常大了。 我们...

原创小博客 ⋅ 今天 ⋅ 0

MyBatis四大核心概念

本文讲解 MyBatis 四大核心概念(SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession、Mapper)。 MyBatis 作为互联网数据库映射工具界的“上古神器”,训有四大“神兽”,谓之:Sql...

waylau ⋅ 今天 ⋅ 0

以太坊java开发包web3j简介

web3j(org.web3j)是Java版本的以太坊JSON RPC接口协议封装实现,如果需要将你的Java应用或安卓应用接入以太坊,或者希望用java开发一个钱包应用,那么用web3j就对了。 web3j的功能相当完整...

汇智网教程 ⋅ 今天 ⋅ 0

2个线程交替打印100以内的数字

重点提示: 线程的本质上只是一个壳子,真正的逻辑其实在“竞态条件”中。 举个例子,比如本题中的打印,那么在竞态条件中,我只需要一个方法即可; 假如我的需求是2个线程,一个+1,一个-1,...

Germmy ⋅ 今天 ⋅ 0

Springboot2 之 Spring Data Redis 实现消息队列——发布/订阅模式

一般来说,消息队列有两种场景,一种是发布者订阅者模式,一种是生产者消费者模式,这里利用redis消息“发布/订阅”来简单实现订阅者模式。 实现之前先过过 redis 发布订阅的一些基础概念和操...

Simonton ⋅ 今天 ⋅ 0

error:Could not find gradle

一.更新Android Studio后打开Project,报如下错误: Error: Could not find com.android.tools.build:gradle:2.2.1. Searched in the following locations: file:/D:/software/android/andro......

Yao--靠自己 ⋅ 昨天 ⋅ 0

Spring boot 项目打包及引入本地jar包

Spring Boot 项目打包以及引入本地Jar包 [TOC] 上篇文章提到 Maven 项目添加本地jar包的三种方式 ,本篇文章记录下在实际项目中的应用。 spring boot 打包方式 我们知道,传统应用可以将程序...

Os_yxguang ⋅ 昨天 ⋅ 0

常见数据结构(二)-树(二叉树,红黑树,B树)

本文介绍数据结构中几种常见的树:二分查找树,2-3树,红黑树,B树 写在前面 本文所有图片均截图自coursera上普林斯顿的课程《Algorithms, Part I》中的Slides 相关命题的证明可参考《算法(第...

浮躁的码农 ⋅ 昨天 ⋅ 0

android -------- 混淆打包报错 (warning - InnerClass ...)

最近做Android混淆打包遇到一些问题,Android Sdutio 3.1 版本打包的 错误如下: Android studio warning - InnerClass annotations are missing corresponding EnclosingMember annotation......

切切歆语 ⋅ 昨天 ⋅ 0

eclipse酷炫大法之设置主题、皮肤

eclipse酷炫大法 目前两款不错的eclipse 1.系统设置 Window->Preferences->General->Appearance 2.Eclipse Marketplace下载【推荐】 Help->Eclipse Marketplace->搜索‘theme’进行安装 比如......

anlve ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部