最快的Java序列化框架Protostuff简介
一、Protostuff介绍
Protostuff是一个开源的、基于Java语言的序列化库,它内建支持向前向后兼容(模式演进)和验证功能。
A java serialization library with built-in support for forward-backward compatibility (schema evolution) and validation.
- efficient, both in speed and memory
- flexible, supporting pluggable formats
Usecase
- messaging layer in RPC
- storage format in the datastore or cache
Protostuff支持的序列化格式包括:
- protobuf
- protostuff
- graph
即序列化对象图,即带循环引用的protostuff。 - json
- smile
即二进制json,与此类似的有BSON格式。要注意一点。Smile数据格式和BSON数据格式是互不兼容的。比方BSON定义了日期类型,而Smile没有日期类型。并且,有时候BSON数据格式占用的空间比原生JSON占用的空间很多其它。对于二进制JSON来说,Smile才是更好的选择。 - xml
- yaml
仅仅支持序列化 - kvp
即二进制的uwsgi头部(Header)
二、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。假设使用了Smile格式,还需jackson-smile。
5、protostuff-parser模块
使用了ANTLR V3、面向.proto文件的词法/语法解析器。
供protostuff-compiler使用。
6、protostuff-compiler模块
面向.proto源文件的编译器。
能够从文件系统、类路径或从网络HTTP URL中加载.proto源文件。
可使用參数-Dproto_path=$path告诉编译器从哪里加载源文件。
可扩展/定制编译的输出。
要编译源文件,执行命令:
java -jar protostuff-compiler-*.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,比方对必填字段的验证等,那么能够手动编码。
最快的Java序列化框架Protostuff简介相关推荐
- Java序列化机制——protoStuff
Java的序列化是在文件传输中必不可少的一部分.常用的Java序列化机制有Java默认的序列化机制,谷歌的protobuf等.而Java默认的序列化机制效率太低,protobuf要写protostuf ...
- java序列化工具 protoStuff的使用
1.前言 在互联网快速发展的今天,互联网架构也在不断的升级.而数据的传输和存贮是互联网系统中不可或缺的一部分.举个简单的例子,目前微服务已经很普及了,就拿dubbo来说,不管用jdk自带的序列化,还是 ...
- java struts2 框架 入门简介
目录 一.Struts2框架执行流程 二.Struts2的快速入门 1.导入jar包 2.配置web.xml文件 3.配置struts.xml文件 4.创建Action来完成逻辑操作 三.Struts ...
- Java爬虫框架WebMagic简介及使用
一.介绍 webmagic的是一个无须配置.便于二次开发的爬虫框架,它提供简单灵活的API,只需少量代码即可实现一个爬虫.webmagic采用完全模块化的设计,功能覆盖整个爬虫的生命周期(链接提取 ...
- 几种Java常用序列化框架的选型与对比
简介: 序列化与反序列化是我们日常数据持久化和网络传输中经常使用的技术,但是目前各种序列化框架让人眼花缭乱,不清楚什么场景到底采用哪种序列化框架.本文会将业界开源的序列化框架进行对比测试,分别从通用性 ...
- Java常用类库以及简介,具体使用细节进行百度(爬虫爬取的数据)
来至于互联网 Office文档的Java处理包 POI [推荐] Apache POI是一个开源的Java读写Excel.WORD等微软OLE2组件文档的项目.目前POI已经有了Ruby版本. 结构: ...
- kryo java_优化Java序列化– Java,XML,JSON,Kryo,POF
kryo java 也许我很天真,但是我一直认为Java序列化肯定是将Java对象序列化为二进制形式的最快,最有效的方法. 毕竟Java是第7个主要发行版,所以这不是新技术,而且由于每个JDK似乎都比 ...
- 优化Java序列化– Java,XML,JSON,Kryo,POF
也许我很天真,但是我一直认为Java序列化肯定是将Java对象序列化为二进制形式的最快,最有效的方法. 毕竟Java是第7个主要发行版,所以这不是新技术,并且由于每个JDK似乎都比上一个快,因此我错误 ...
- Kryo:快速、高效的序列化框架
http://hao.jobbole.com/kryo/ Kryo是一个快速高效的Java序列化框架,旨在提供快速.高效和易用的API.无论文件.数据库或网络数据Kryo都可以随时完成序列化.Kryo ...
- Java日志框架——Logback
Java日志框架--Logback 简介 1.1 Logback概述 1.2 日志级别 1.3 组件 1.4 配置文件 1.5 日志输出格式 项目中应用步骤 2.1 依赖 2.2 日志输出到控制台 2 ...
最新文章
- python二分法查找
- [PAPER-RECORD]
- boost::histogram::detail::make_default用法的测试程序
- memcpy函数的实现
- Linux 下wifi 驱动开发(四)—— USB接口WiFi驱动浅析
- 英语口语 Week15 TuesDay
- 周五跟大佬喝酒,顺便打了个球
- 第六篇:如何学习C语言?
- Redux的全家桶与最佳实践
- 用 npm script 实现服务自动化运维
- java凉的可能性,薄荷凉茶一凉到底
- Vue3 组合式Api之customRef实现防抖功能
- jQuery..1..基本使用..选择
- 中文系统使用日文键盘-转
- gridview生成的html,.NET_GridView生成的HTML代码示例对比,复制代码 代码如下: asp:GridV - phpStudy...
- Windows投屏android电视,Windows电脑无线投屏到电视
- ion-infinite-scroll上拉加载 ion-refresher下拉刷新
- plsql 英文版 修改字体,工具栏大小
- 共模电感磁芯材质你知道哪几种
- 80后外卖小哥实力惊艳中国诗词大会,诗词的力量改变人生轨迹丨好书优选
热门文章
- 56. Attribute value 属性
- [2019上海网络赛J题]Stone game
- offsetX、clientX、screenX、pageX、layerX
- PHP—通过HTML网页请求,PHP页面显示源码不能解析
- Spring AOP高级——源码实现(2)Spring AOP中通知器(Advisor)与切面(Aspect)
- 多线程--对象及变量的并发访问
- JS对象 颠倒数组元素顺序reverse() reverse() 方法用于颠倒数组中元素的顺序。
- win8.1硬盘安装ubuntu14.04双系统
- c++获得鼠标当前位置
- 解决响应式布局border带来的麻烦