mysql 协议的ResultsetRow包及解析
git
https://github.com/sea-boat/mysql-protocol
概况
ResultsetRow包属于服务端返回ResultSet时的其中一部分包,用于描述结果集的行记录。
mysql通信报文结构
类型 | 名字 | 描述 |
---|---|---|
int<3> | payload长度 | 按照the least significant byte first存储,3个字节的payload和1个字节的序列号组合成报文头 |
int<1> | 序列号 | |
string | payload | 报文体,长度即为前面指定的payload长度 |
ResultsetRow包
Payload
if(NULL){0xfb
}else{Protocol::LengthEncodedString
}
更多详情 : http://dev.mysql.com/doc/internals/en/com-query-response.html#text-resultset
ResultsetRow包类
/*** * <pre><b>resultset row packet.</b></pre>* @author * <pre>seaboat</pre>* <pre><b>email: </b>849586227@qq.com</pre>* <pre><b>blog: </b>http://blog.csdn.net/wangyangzhizhou</pre>* @version 1.0* @see http://dev.mysql.com/doc/internals/en/com-query-response.html#text-resultset*/
public class ResultsetRowPacket extends MySQLPacket {private static final byte NULL_MARK = (byte) 251;public int columnCount;public List<byte[]> columnValues;public ResultsetRowPacket() {}public ResultsetRowPacket(int columnCount) {this.columnCount = columnCount;}@Overridepublic void read(byte[] data) {MySQLMessage mm = new MySQLMessage(data);packetLength = mm.readUB3();packetId = mm.read();for (int i = 0; i < columnCount; i++) {columnValues.add(mm.readBytesWithLength());}}@Overridepublic void write(ByteBuffer buffer) {BufferUtil.writeUB3(buffer, calcPacketSize());buffer.put(packetId);for (int i = 0; i < columnCount; i++) {byte[] fv = columnValues.get(i);if (fv == null) {buffer.put(NULL_MARK);} else {BufferUtil.writeLength(buffer, fv.length);buffer.put(fv);}}}@Overridepublic int calcPacketSize() {int size = 0;for (int i = 0; i < columnCount; i++) {byte[] v = columnValues.get(i);size += (v == null || v.length == 0) ? 1 : BufferUtil.getLength(v);}return size;}@Overrideprotected String getPacketInfo() {return "MySQL Resultset Row Packet";}}
========广告时间========
鄙人的新书《Tomcat内核设计剖析》已经在京东销售了,有需要的朋友可以到 https://item.jd.com/12185360.html 进行预定。感谢各位朋友。
为什么写《Tomcat内核设计剖析》
=========================
mysql 协议的ResultsetRow包及解析相关推荐
- mysql eof_详细介绍mysql 协议的EOF包及解析
git https://github.com/sea-boat/mysql-protocol 概况 mysql的EOF包用于标明查询结果的结尾. mysql通信报文结构类型名字描述int<3&g ...
- mysql 协议的query包及解析
git https://github.com/sea-boat/mysql-protocol 概况 mysql客户端可以用query包向服务端发送一个基于文本查询. mysql通信报文结构 类型 名字 ...
- mysql 协议的OK包及解析
git https://github.com/sea-boat/mysql-protocol 概况 mysql客户端与mysql服务端交互过程中,当服务端完成客户端的某命令时则会返回OK包. mysq ...
- netty实现mysql协议_基于Netty模拟解析Binlog
前言 最近一段时间一直再看mysql binlog相关的内容,也整理了几篇相关的文章,对mysql的事件以及通讯协议在理论上有了一个大概的了解,但是缺少实战:本文的目的就是从实战出发,了解binlog ...
- MySQL协议解析及C/C++代码实现
MySQL 常用于许多知名网站,包括 Facebook.Google.Twitter 和 YouTube等等.它于 1995 年首次发布.MySQL 是用 C 和 C++ 编写的. MySQL 适用于 ...
- tshark 解析pcap中带TLS协议的数据包
tshark的简单用法参考:tshark解析本地pcap数据包提取五元组{src_ip,src_port,proto,dst_ip,dst_port}与时间戳,包长 详细用法:官方DOC 比如提取一个 ...
- java实现FTP协议:wireshark抓包解析
本节我们看看ftp协议的数据包格式,同时使用代码加以实现.首先我们现在机器上安装ftp服务器,我在自己的机器上安装了QuickFTP Server,它是我随便找来的一款Mac ftp服务器,如下图所示 ...
- 怒肝两个月MySQL源码,我总结出这篇2W字的MySQL协议详解(超硬核干货)!!
写在前面 最近,在开发一个分库分表中间件,由于功能需求,需要分析MySQL协议,发现网上对于MySQL协议分析的文章大部分都过时了,原因是分析的MySQL版本太低了.怎么办呢?于是乎,我便硬着头皮开始 ...
- mysql long类型_怒肝两个月MySQL源码,我总结出这篇2W字的MySQL协议详解(超硬核干货)!!...
点击上方蓝色"冰河技术",关注并选择"设为星标" 持之以恒,贵在坚持,每天进步一点点! 作者个人研发的在高并发场景下,提供的简单.稳定.可扩展的延迟消息队列框架 ...
最新文章
- Configuring the Java Virtual Manager (JVM)
- JDK8-lambda表达式四种forEach性能对比
- 自网站服务器,教你如何配置自的网站服务器.doc
- java jni日志输出_java打印Jni层log
- 如何在Mac计算机上轻松查找和删除类似照片
- 0924html小测答案
- 【Docker】Docker安装telnet
- 计算机专业简述,简述计算机专业毕业论文完整版.doc
- .net 访问共享文件夹
- 目标检测算法之YOLOV5
- 柳絮飘,往事忆:前言
- Vector For All (slight return)
- # C语言使用树设计族谱
- 云平台的云计算安全参数详解
- 第11届极客大挑战writeup
- 小程序设置边框border
- 智能扫地机器人好用吗?行业排名TOP5扫地机器人推荐
- 未能找到类型或命名空间名称“XXXX”(是否缺少 using 指令或程序集引用?)
- Oracle 中经常遇到的一些问题
- 怎样基于power supply class编写PSY driver