hessian-serialization
http://hessian.caucho.com/doc/hessian-serialization.html
Table of Contents
1. Introduction
2. Design Goals
3. Hessian Grammar
4. Serialization
4.1. binary data
4.1.1. Compact: short binary
4.1.2. Binary Examples
4.2. boolean
4.2.1. Boolean Examples
4.3. date
4.3.1. Compact: date in minutes
4.3.2. Date Examples
4.4. double
4.4.1. Compact: double zero
4.4.2. Compact: double one
4.4.3. Compact: double octet
4.4.4. Compact: double short
4.4.5. Compact: double float
4.4.6. Double Examples
4.5. int
4.5.1. Compact: single octet integers
4.5.2. Compact: two octet integers
4.5.3. Compact: three octet integers
4.5.4. Integer Examples
4.6. list
4.6.1. Compact: fixed length list
4.6.2. List examples
4.7. long
4.7.1. Compact: single octet longs
4.7.2. Compact: two octet longs
4.7.3. Compact: three octet longs
4.7.4. Compact: four octet longs
4.7.5. Long Examples
4.8. map
4.8.1. Map examples
4.9. null
4.10. object
4.10.1. Compact: class definition
4.10.2. Compact: object instantiation
4.10.3. Object examples
4.11. ref
4.11.1. Ref Examples
4.12. string
4.12.1. Compact: short strings
4.12.2. String Examples
4.13. type
4.14. Compact: type references
5. Reference Maps
5.1. value reference
5.2. class reference
5.3. type reference
6. Bytecode map
§ Authors' Addresses
§ Intellectual Property and Copyright Statements
TOC |
1. Introduction
Hessian is a dynamically-typed, binary serialization and Web Services protocol designed for object-oriented transmission.
TOC |
2. Design Goals
Hessian is dynamically-typed, compact, and portable across languages.
The Hessian protocol has the following design goals:
- It must self-describe the serialized types, i.e. not require external schema or interface definitions.
- It must be language-independent, including supporting scripting languages.
- It must be readable or writable in a single pass.
- It must be as compact as possible.
- It must be simple so it can be effectively tested and implemented.
- It must be as fast as possible.
- It must support Unicode strings.
- It must support 8-bit binary data without escaping or using attachments.
- It must support encryption, compression, signature, and transaction context envelopes.
TOC |
3. Hessian Grammar
Serialization Grammar
# starting production
top ::= value # 8-bit binary data split into 64k chunks
binary ::= x41 b1 b0 <binary-data> binary # non-final chunk
::= 'B' b1 b0 <binary-data> # final chunk
::= [x20-x2f] <binary-data> # binary data of
# length 0-15
::= [x34-x37] <binary-data> # binary data of
# length 0-1023 # boolean true/false
boolean ::= 'T'
::= 'F' # definition for an object (compact map)
class-def ::= 'C' string int string* # time in UTC encoded as 64-bit long milliseconds since
# epoch
date ::= x4a b7 b6 b5 b4 b3 b2 b1 b0
::= x4b b3 b2 b1 b0 # minutes since epoch # 64-bit IEEE double
double ::= 'D' b7 b6 b5 b4 b3 b2 b1 b0
::= x5b # 0.0
::= x5c # 1.0
::= x5d b0 # byte cast to double
# (-128.0 to 127.0)
::= x5e b1 b0 # short cast to double
::= x5f b3 b2 b1 b0 # 32-bit float cast to double # 32-bit signed integer
int ::= 'I' b3 b2 b1 b0
::= [x80-xbf] # -x10 to x3f
::= [xc0-xcf] b0 # -x800 to x7ff
::= [xd0-xd7] b1 b0 # -x40000 to x3ffff # list/vector
list ::= x55 type value* 'Z' # variable-length list
::= 'V' type int value* # fixed-length list
::= x57 value* 'Z' # variable-length untyped list
::= x58 int value* # fixed-length untyped list
::= [x70-77] type value* # fixed-length typed list
::= [x78-7f] value* # fixed-length untyped list # 64-bit signed long integer
long ::= 'L' b7 b6 b5 b4 b3 b2 b1 b0
::= [xd8-xef] # -x08 to x0f
::= [xf0-xff] b0 # -x800 to x7ff
::= [x38-x3f] b1 b0 # -x40000 to x3ffff
::= x59 b3 b2 b1 b0 # 32-bit integer cast to long # map/object
map ::= 'M' type (value value)* 'Z' # key, value map pairs
::= 'H' (value value)* 'Z' # untyped key, value # null value
null ::= 'N' # Object instance
object ::= 'O' int value*
::= [x60-x6f] value* # value reference (e.g. circular trees and graphs)
ref ::= x51 int # reference to nth map/list/object # UTF-8 encoded character string split into 64k chunks
string ::= x52 b1 b0 <utf8-data> string # non-final chunk
::= 'S' b1 b0 <utf8-data> # string of length
# 0-65535
::= [x00-x1f] <utf8-data> # string of length
# 0-31
::= [x30-x34] <utf8-data> # string of length
# 0-1023 # map/list types for OO languages
type ::= string # type name
::= int # type reference # main production
value ::= null
::= binary
::= boolean
::= class-def value
::= date
::= double
::= int
::= list
::= long
::= map
::= object
::= ref
::= string
Figure 1 |
TOC |
4. Serialization
Hessian's object serialization has 8 primitive types:
- raw binary data
- boolean
- 64-bit millisecond date
- 64-bit double
- 32-bit int
- 64-bit long
- null
- UTF8-encoded string
It has 3 recursive types:
Finally, it has one special contruct:
- ref for shared and circular object references.
Hessian 2.0 has 3 internal reference maps:
hessian-serialization的更多相关文章
- dubbo 官方参考手册~备案(防止哪天阿里一生气把dubbo给删除了)
首页 || 下载 || 用户指南 || 开发者指南 || 管理员指南 || 培训文档 || 常见问题解答 || 发布记录 || 发展路线 || 社区 E ...
- dubbo用户指南
用户指南 入门 背景 需求 架构 用法 快速启动 服务提供者 服务消费者 依赖 必需依赖 缺省依赖 可选依赖 成熟度 功能成熟度 策略成熟度 配置 Xml配置 属性配置 注解配置 API配置 示例 启 ...
- dubbo用户指南-总结
dubbo用户指南-总结 入门 背景 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进. 单一应用 ...
- 初识Dubbo 系列之5-Dubbo 成熟度
成熟度 功能成熟度 Feature特征 Maturity成熟度 Strength强度 Problem问题 Advise建议 User用户 并发控制 Tested 并发控制 试用 连接控制 Te ...
- dubbo框架设计学习
1.整体设计 (1)架构图 图例说明: 图中左边淡蓝背景的为服务消费方使用的接口,右边淡绿色背景的为服务提供方使用的接口,位于中轴线上的为双方都用到的接口. 图中从下至上分为十层,各层均为单向依赖,右 ...
- [收藏]Dubbo官方资料
首页 || 下载 || 用户指南 || 开发者指南 || 管理员指南 || 培训文档 || 常见问题解答 || 发布记录 || 发展路线 || 社区 English ...
- Dubble 01 架构模型&start project
Dubbo 01 架构模型 传统架构 All in One 测试麻烦,微小修改 全都得重新测 单体架构也称之为单体系统或者是单体应用.就是一种把系统中所有的功能.模块耦合在一个应用中的架构方式.其优点 ...
- Dubble 入门
Dubbo 01 架构模型 传统架构 All in One 测试麻烦,微小修改 全都得重新测 单体架构也称之为单体系统或者是单体应用.就是一种把系统中所有的功能.模块耦合在一个应用中的架构方式.其优点 ...
- Dubbo 成熟度策略.
url: http://dubbo.apache.org/zh-cn/docs/user/maturity.html Dubbo成熟度策略 Feature Maturity Strength Prob ...
- Hessian 2.0 序列化协议 - Hessian 2.0 Serialization Protocol 翻译
Hessian是一种轻量.快速的web协议,在微服务场景下经常被使用. Hessian协议实际上包含两种含义: 1. Web网络通信远程调用服务,具体可以参考:http://hessian.cauch ...
随机推荐
- python的常量与变量
1.Python属于强类型编程语言,Python解释器会根据赋值或运算来自动判断变量的类型.Python还是一种动态类型语言,变量的类型也是可以随时变化的. >>> x=3 > ...
- 大白话Java多线程,小白都能看的懂的哦
什么是线程 说到线程我们应该先了解下什么是进程,下面这个图片大家应该都比较熟悉吧. 我们看到的这些单独运行的程序就是一个独立的进程,进程之间是相互独立存在的.我们上面图中的360浏览器.百度云盘等等都 ...
- Spring Data JPA简介 Spring Data JPA特点
Spring Data JPA 是Spring基于ORM框架.JPA规范的基础上封装的一套JPA 应用框架,底层使用了Hibernate 的JPA技术实现,可使开发者用极简的代码即可实现对数据的访问和 ...
- js表单简单验证(手机号邮箱)
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncod ...
- JavaDailyReports10_12
运算级自增自减运算符大于取值运算符*,大于取地址运算符! 1 #include<stdio.h> 2 #include<string.h> 3 #define OK 1 4 # ...
- 2020年Python文章盘点,我选出了个人TOP10
大家好,我是猫哥.2020年过得真快啊!总感觉这一年里还没有做成多少事,一眨眼就又到了写年度总结的时候了-- 去年1月1日的时候,我写了<我的 2019 年 Python 文章榜单>,简单 ...
- CyclicBarrier(栅栏)的用法详解及与countDownLatch用法区别
CyclicBarrier适用于这样的情况:你希望创建一组任务,它们并行的执行工作,然后在进行下一步步骤之前等待,直至所有任务都完成,它使得所有的并行任务都将在删栏出列队,因此可以一致的向前移动. 当 ...
- tabControl组件的吸顶效果
最开始,还没有使用better-scroll插件的时候,直接在class中设定了一定的position为sticky,设置一定的top达成了效果.但是,使用better-scroll组件后,这些属性就 ...
- Beta冲刺——第五天
这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzzcxy/2018SE1 这个作业要求在哪里 https://edu.cnblogs.com/campus/fz ...
- kubectl常用命令(个人记录)
一.获取pod信息 1.获取当前集群运行的所有的pods的信息 kubectl get pod 2.获取当前集群运行的所有的pod运行在哪个节点 kubectl get pods -owide ...