java自定义序列化协议
时间:2021-06-28 20:08:42
收藏:0
阅读:0
title: java自定义序列化协议
tags: [序列化,protobuf]
date: 2018/5/15 20:26:25
categories:
- 开发
- java
序列化协议
相信大家见识过很序列化的框架 : fastjson , hessian ,kryo,protobuf,jdk序列化
- 序列化:让java跨越时间和空间一样的存在 。
protobuf
int 本身是4个字节,但是大部分情况下没有4个字节,所以protobuf就用位运算对int进行了压缩
int 1~5个字节, 因为它每个字节只保存7位,第8位用来表示后面还有没有字节
while(true){
if(value & ~0x7F == 0){ // 如果小于1个字节
writeRawByte(value);return;
}else{// 大于1个字节,
// 先写第一个字节7位,并标记第8位为1
writeRawByte((value & 0x7F) | ox80);
// 右移截断已经写入的7位,继续循环
value >>>= 7;
}
}
自定义
- 也拿int来举例,但是可以有不一样的序列化规则
- ~ ~ 0000 0101 ==> 0000 0101 1000 0001
原本的4个字节 第1个字节表示一共占几个字节(前面7位)+ 是否还有字节(第8位)
第2个字节开始表示int有效数据
报文协议
可能不止下面这些包含,以后单独再学习
包含内容
- 头部
- 长度
- 命令字(定位:模块+方法)
- 密签
- 数据(序列化咯)
组装顺序
评论(0)