发现自己写的文章更多是偏向于理论.

现在就写点实战的文章吧.

QQ浏览器返回和发送的数据都是通过JceStruct协议来传输的.当然这个传输过程是经过层层加密的.解密后的内容就是JceStruct协议.

JceStruct 协议和Protobuf 协议有点像,也是采用Key-Value的形式.但感觉比Protobuf更简洁一点.也更简单一点.

JceStruct 的内容组织形式

Key

我们先来看看Key是怎么组织的.

描述Key的类为:HeadData

public static class HeadData {

public int tag;

public byte type;

}

可以看到Key被分为了两部分,一部分是tag,一部分是type.

读取Key的函数为

public static int readHead(HeadData headData, ByteBuffer byteBuffer) {

byte b = byteBuffer.get();//获取一个byte

headData.type = (byte) (b & 0xF);//低4位为类型

headData.tag = (b & 0xF0) >> 4;//高4位为tag,

if (headData.tag != 0xF) {//如果tag为0xF 则下一个字段为tag

return 1;

}

headData.tag = byteBuffer.get() & 0xFF;

return 2;

}

函数功能非常简单.

字节低4位为type 表示序号对应的类型

字节高4位为tag 表示序号

如果tag为0xF,下一个字节为tag.

总结一下:

Key由tag和type组成

Key为1个字节或两个字节.两个字节时第二个字节为tag否则第一个字节的高4位为tag.type始终为第一个字节的低4位.

type最多有16种类型,tag最大为255.

type

根据分析type的类型如下:

类型

0

byte 或 bool

1

Short

2

Int

3

Long

4

Float

5

Double

6,7

String

8

Map

9

List

10

STRUCT_BEGIN 继承了JceStruct类的开始

11

STRUCT_END 继承了JceStruct类的结束

12

ZERO_TAG

Value解析

解析标准的Java类型

根据不同的类型对Value的解析就会有所不同.

其中byte,bool,Short,Int,Long, Float,Double的解析都是一样的,只不过读取的字节数不同而已.

我们以Int为例:

public int read(int i, int i2, boolean z) {

if (skipToTag(i2)) {

HeadData headData = new HeadData();

readHead(headData);

switch (headData.type) {

case (byte) 0:

return this.bs.get();

case (byte)

android qq协议 java,[原创]QQ 浏览器 JceStruct 协议相关推荐

  1. java手机令牌下载_qq手机令牌java,qq手机令牌java下载|qq手机令牌java 3.2_星空下载站...

    qq手机令牌是一款能够对qq账户起到保护作用的软件,这款应用软件拥有强大的功能,保护了用户的qq账号和qq财产安全.这款应用软件拥有极好的系统兼容性,保证了用户在不同设备上都能正常运行,流畅运行的系统 ...

  2. Javascript JS 网页分享到QQ空间QQ,java实现qq分享,url带参数的方法

    网页js实现qq分享 创建一个jsp页面,html页面也行,下面是简单demo代码,直接复制到就能用 html把头 <%@ page language="java" cont ...

  3. android学习笔记---55_frame动画的实现,Java技术qq交流群:JavaDream:251572072

    android学习笔记---55_frame动画的实现,Java技术qq交流群:JavaDream:251572072 Java技术qq交流群:JavaDream:251572072 2013/5/1 ...

  4. android零碎要点---android开发者的福音,59_1 Android的界面设计工具,直接拖拉就可以设计界面,Java技术qq交流群:JavaDream:251572072

    Java技术qq交流群:JavaDream:251572072 2013/5/16 59_1 Android的界面设计工具 -------------------------------------- ...

  5. 【腾讯开放平台】Android、IOS实现指定QQ临时会话功能

    腾讯开放平台提供了WPA接口,能够实现对于普通用户,无需加其好友就能和其发起临时会话(但是对于400开头的企业QQ号,如Mob平台的企业QQ:4006852216 ,必须先加其好友才能实现临时会话), ...

  6. java qq 传送文件_如何利用Java实现QQ文件传输功能.pdf

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp计算机&nbsp>&nbspJava 如何利用Java实现QQ文件传输功能.pdf2页 本文 ...

  7. 分析Androidqq协议之收到qq群消息

    准备工具 010hextor 用于导入hex文本为hex流. 易语言开发工具 安卓协议g源码 记事本 16进制比较工具(传输的是utf-8所以用utf-8可以把里面的不分16进制转换为utf-8编码获 ...

  8. Android WindowManager 解析与骗取 QQ 密码案例分析

    最近在网上看见一个人在乌云上提了一个漏洞,应用可以开启一个后台 Service,检测当前顶部应用,如果为 QQ 或相关应用,就弹出一个自定义 window 用来诱骗用户输入账号密码,挺感兴趣的,总结相 ...

  9. java发送qq邮箱不成功_java,_使用QQ邮箱发送邮件遇到的问题,java - phpStudy

    使用QQ邮箱发送邮件遇到的问题 代码是在网上抄的别人今年写的,但是我运行起来一直报错,也不知道什么原因,请大神帮忙指点一下::谢谢!!! 以下是我的代码 public class Sendmail8 ...

最新文章

  1. 操作canal,报错:Caused by: java.io.IOException: end of stream when reading header
  2. {面试题6: 重建二叉树}
  3. php intl make 错误,无法在Debian上为php安装’intl’扩展名
  4. 计算机基础教程2 - 计算机发展历程
  5. 数据结构概念及连续存储数组的算法演示
  6. OpenCV图像处理基础(变换和去噪)
  7. 拥抱数据共享与代码开源的新时代
  8. 数据分析之分析美国人口
  9. 手机端答题页面_有奖答题来啦!科普知识等你来挑战……
  10. EasyIcon:免费图标搜索和下载平台
  11. Qt中打包程序运行时出现:0xc000007b错误
  12. Linux中cd会进入什么位置,linux命令中cd/和cd命令是什么意思
  13. 网络安全技术——网络地址转换(NAT)
  14. 基于WiFi的CSI数据做呼吸频率检测-python版(含代码和数据)
  15. 基于智能手机的报纸阅读器-论文
  16. 计算机一级wps选择题必背知识点,2017全国计算机一级《WPS》复习题「附答案」...
  17. 神经网络中的sigmoid函数
  18. 对前端的一些粗浅的认识
  19. 笔记本高分屏字体模糊_4k/1080p屏幕字体模糊怎么办?win10高分屏笔记本字体模糊太小的解决办法...
  20. python剪刀石头布小游戏源码下载_Python Tkinter实现剪刀石头布小游戏

热门文章

  1. 使用定义判断函数的奇偶性
  2. 【SpringCloud】SpringCloud基础
  3. 群晖服务器显示灯,群晖猫盘LED呼吸灯显示网络状态
  4. 指导教师的shooow
  5. 单目标遗传算法 精英保留策略
  6. Vant Weapp 0.5.9 发布,有赞小程序 UI 组件库
  7. 蘑菇街:有做小红书的心,没做小红书的命
  8. 成都砺鹰教育之西南民族大学创业讲座现场座无虚席!
  9. 第七十七章 SQL函数 LENGTH
  10. adb native raact 夜神_如何使用夜神模拟器调试ReactNative应用