QT ---QTextStream 类(文本流)和 QDataStream 类(数据流)
2023-04-18 14:27:46 时间
参考文章–https://blog.51cto.com/u_11531789/5046248
利用QDateStream读写二进制文件参考:https://blog.csdn.net/wzz953200463/article/details/114107102
QDataStream
读写原始二进制数据
可以使用int readRawData(char s, int len)将数据读入一个预先分配好的char;
缓冲区 s 必须被预先分配,缓冲区 s 使用 new[]分配,使用 delete 操作符销毁
可以使用int writeRawData(const char *s, int len)函数把原始数据写入datastream
使用这种方式的话,要由你自己进行所有数据的编码和解码
int writeRawData(const char *s, int len);
把 len 个字节的数据从缓冲区 s 写入流,并返回实际写入的字节数,若发生错误,则返回-1,注意:数据未编码
int readRawData(char *s, int len);
从流中读取最多 len 个字节到缓冲区 s 中,并返回读取的字节数,若产生错误,则返回−1,缓冲区 s 必须被预先分配。数据是未编码的。
示例代码
QFile f("l.txt");
QDataStream out(&f);
f.open(QIODevice::WriteOnly);
out<<QString("BBB");
/*以二进制形式写入一个字符串BBB到文件l.txt中,注意:以此种方式写入的字符串BBB是已经编了码的,
因此实际写入文件的内容并不一定是4字节的大小。*/
char c[4]="CCC"; //创建缓冲区
int i1=out.writeRawData(c,4); //把缓冲区c中的4个字节内容写入流中
//注:因为此函数写入的内容未编码,因此将直接向文件写入一个字符串"ccc"(4字节大小)
qDebug()<<i1;
f.close();
QDataStream in(&f);
f.open(QIODevice::ReadOnly);
char *pc=new char[114]; //创建一个缓冲区
int i2=in.readRawData(pc,114); //从流中读取最多114个字节内容放到缓冲区pc中
//此时pc中保存的值就是文件l.txt中的原始二进制数据,注意:实际未必会读取114个字节
qDebug()<<i2; //输出实际读取的字节数
for(int j=0;j<i2;j++){ //输出全部内容,以循环的方式逐字符输出
qDebug()<<pc[j];
}
f.close();
}
实例:读取保存自定义类对象
writeBytes()
QDataStream &QDataStream::writeBytes(const char *s, uint len)
先向文件写入一个quint32的数据,该值就是将要写入的数据的长度;紧接着写入相应数据
readBytes()
QDataStream &QDataStream::readBytes(char *&s, uint &l)
先从文件读取一个quint32值,该值就是将要读取的数据的长度,然后读取相应字节的数据到预先定义好的char*中
注意,readBytes() 不需要我们事先分配好内存
相关文章
- 直接在代码里面对list集合进行分页
- .NET Framework 4.5新特性详解
- 大数据的简要介绍
- 大数据的由来
- 高斯混合模型的自然梯度变量推理
- timing-wheel 仿Kafka实现的时间轮算法
- 使用Navicat软件连接自建数据库(Linux系统)
- 那一天,我被Redis主从架构支配的恐惧
- Redis 深入了解键的过期时间
- C#使用委托调用实现用户端等待闪屏
- 基于流计算 Oceanus 和 Elasticsearch Service 构建百亿级实时监控系统
- GRAND | 转录调控网络预测数据库
- JFreeChart API中文文档
- 临床相关突变查询数据库
- TIGER | 人类胰岛基因变化查询数据库
- 视频边缘计算网关EasyNVR在视频整体监控解决方案中的应用分析
- Apache Arrow - 大数据在数据湖后的下一个风向标
- 常见的电商数据指标体系
- AKShare-艺人数据-艺人流量价值
- MySQL中多表联合查询与子查询的这些区别,你可能不知道!