android qq协议 java,[原创]QQ 浏览器 JceStruct 协议
发现自己写的文章更多是偏向于理论.
现在就写点实战的文章吧.
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 协议相关推荐
- java手机令牌下载_qq手机令牌java,qq手机令牌java下载|qq手机令牌java 3.2_星空下载站...
qq手机令牌是一款能够对qq账户起到保护作用的软件,这款应用软件拥有强大的功能,保护了用户的qq账号和qq财产安全.这款应用软件拥有极好的系统兼容性,保证了用户在不同设备上都能正常运行,流畅运行的系统 ...
- Javascript JS 网页分享到QQ空间QQ,java实现qq分享,url带参数的方法
网页js实现qq分享 创建一个jsp页面,html页面也行,下面是简单demo代码,直接复制到就能用 html把头 <%@ page language="java" cont ...
- android学习笔记---55_frame动画的实现,Java技术qq交流群:JavaDream:251572072
android学习笔记---55_frame动画的实现,Java技术qq交流群:JavaDream:251572072 Java技术qq交流群:JavaDream:251572072 2013/5/1 ...
- android零碎要点---android开发者的福音,59_1 Android的界面设计工具,直接拖拉就可以设计界面,Java技术qq交流群:JavaDream:251572072
Java技术qq交流群:JavaDream:251572072 2013/5/16 59_1 Android的界面设计工具 -------------------------------------- ...
- 【腾讯开放平台】Android、IOS实现指定QQ临时会话功能
腾讯开放平台提供了WPA接口,能够实现对于普通用户,无需加其好友就能和其发起临时会话(但是对于400开头的企业QQ号,如Mob平台的企业QQ:4006852216 ,必须先加其好友才能实现临时会话), ...
- java qq 传送文件_如何利用Java实现QQ文件传输功能.pdf
您所在位置:网站首页 > 海量文档  > 计算机 > Java 如何利用Java实现QQ文件传输功能.pdf2页 本文 ...
- 分析Androidqq协议之收到qq群消息
准备工具 010hextor 用于导入hex文本为hex流. 易语言开发工具 安卓协议g源码 记事本 16进制比较工具(传输的是utf-8所以用utf-8可以把里面的不分16进制转换为utf-8编码获 ...
- Android WindowManager 解析与骗取 QQ 密码案例分析
最近在网上看见一个人在乌云上提了一个漏洞,应用可以开启一个后台 Service,检测当前顶部应用,如果为 QQ 或相关应用,就弹出一个自定义 window 用来诱骗用户输入账号密码,挺感兴趣的,总结相 ...
- java发送qq邮箱不成功_java,_使用QQ邮箱发送邮件遇到的问题,java - phpStudy
使用QQ邮箱发送邮件遇到的问题 代码是在网上抄的别人今年写的,但是我运行起来一直报错,也不知道什么原因,请大神帮忙指点一下::谢谢!!! 以下是我的代码 public class Sendmail8 ...
最新文章
- 操作canal,报错:Caused by: java.io.IOException: end of stream when reading header
- {面试题6: 重建二叉树}
- php intl make 错误,无法在Debian上为php安装’intl’扩展名
- 计算机基础教程2 - 计算机发展历程
- 数据结构概念及连续存储数组的算法演示
- OpenCV图像处理基础(变换和去噪)
- 拥抱数据共享与代码开源的新时代
- 数据分析之分析美国人口
- 手机端答题页面_有奖答题来啦!科普知识等你来挑战……
- EasyIcon:免费图标搜索和下载平台
- Qt中打包程序运行时出现:0xc000007b错误
- Linux中cd会进入什么位置,linux命令中cd/和cd命令是什么意思
- 网络安全技术——网络地址转换(NAT)
- 基于WiFi的CSI数据做呼吸频率检测-python版(含代码和数据)
- 基于智能手机的报纸阅读器-论文
- 计算机一级wps选择题必背知识点,2017全国计算机一级《WPS》复习题「附答案」...
- 神经网络中的sigmoid函数
- 对前端的一些粗浅的认识
- 笔记本高分屏字体模糊_4k/1080p屏幕字体模糊怎么办?win10高分屏笔记本字体模糊太小的解决办法...
- python剪刀石头布小游戏源码下载_Python Tkinter实现剪刀石头布小游戏