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有效数据

报文协议

可能不止下面这些包含,以后单独再学习

包含内容
  • 头部
  • 长度
  • 命令字(定位:模块+方法)
  • 密签
  • 数据(序列化咯)
组装顺序
posted @ 2021-06-27 17:33  沉梦匠心  阅读(201)  评论(1)    收藏  举报