ibstream_view 和 ibstream

二进制读取流,ibstream_view借鉴C++17标准引入的 std::string_view 无GC读取二进制数据, 读取数值类型时自动转换为主机字节序, 如果需要使用深拷贝对象,使用ibstream即可, ibstream继承了所有ibstream_view关于二进制读取的接口。

命名空间

namespace yasio

成员

函数名

函数说明

ibstream_view::ibstream_view

构造ibstream_view对象

公共方法:

函数名

函数说明

ibstream_view::reset

重置输入数据

ibstream_view::read_i

函数模板,写入数值数据,会自动转化为网络字节序

ibstream_view::read_i24

读取24位有符号整数

ibstream_view::read_u24

读取24位无符号整数

ibstream_view::read_7b

读取7bit Encoded Int变长存储

ibstream_view::read_v

读取字节流数据,会先读取7bit编码的变长长度域

ibstream_view::read_v32

读取字节流数据,使用32bit长度域

ibstream_view::read_v16

读取字节流数据,使用16bit长度域

ibstream_view::read_v8

读取字节流数据,使用8bit长度域

ibstream_view::read_byte

读取一个字节

ibstream_view::read_bytes

读取字节流数据,无长度域

ibstream_view::seek

移动流指针,和系统文件io lseek用法相同

ibstream_view::length

获取stream总字节数

ibstream_view::data

获取字节数据指针

ibstream_view::sread_i

静态方法,在指定地址读取数值数据,会自动转化为网络字节序

Example

ibstream_view ibs(event->packet().data(), event->packet().size());

// 读取1字节整数
int8_t cmd = ibs.read_i<int8_t>();

// 跳过4字节长度域
ibs.seek(4, SEEK_CUR);

int16_t seq = ibs.read_i<int16_t>();
cxx17::string_view content = ibs.read_v();