Qt--文本流和数据流缓冲操作和数据操作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt--文本流和数据流缓冲操作和数据操作相关的知识,希望对你有一定的参考价值。

一.文本流和数据流

A.Qt中讲文件类型分为2大类
1.文本文件--文件内容是可读的文本字符
2.数据文件--文件内容是直接的二进制数据
QFile直接支持文本文件和数据文件的读写
技术图片
B.Qt提供了辅助类简化了文本文件/数据文件的读写
1.QTextStream--写入的数据全部转换为可读文本
2.QDataStream--写入的数据根据类型转换为二进制数据
IO设备辅助类的使用方式
技术图片
不同的Qt版本的数据流文件格式可能不同
void setVersion(int v)//设置的版本号
int version()const//获取读写版本号

代码示例

#include <QCoreApplication>
#include <QFile>
#include <QDebug>

int main(int argc, char *argv[])

    QCoreApplication a(argc, argv);
    QFile file("C:/Users/59673/Desktop/test.hex");

    if( file.open(QIODevice::WriteOnly) )
    
        QString dt = "mylovedandanxiaohai";
        double value = 3.14;

        file.write(dt.toStdString().c_str());
        file.write(reinterpret_cast<char*>(&value), sizeof(value));

        file.close();
    

    if( file.open(QIODevice::ReadOnly) )
    
        QString dt = "";
        double value = 0;

        dt = QString(file.read(19));
        file.read(reinterpret_cast<char*>(&value), sizeof(value));

        file.close();

        qDebug() << dt;
        qDebug() << value;
    

    return a.exec();

运行结果
技术图片

二.缓冲区操作与目录操作

A.Qt中缓冲区的概念
1.缓冲区的本质为一段连续的存储空间
2.QBuffer是Qt中缓冲区相关的类
3.在Qt中可以将缓冲区看作一种特殊的IO设备
4.文件流辅助类可以直接用于操作缓冲区
QBuffer缓冲区的使用方式技术图片
代码示例

#include <QtCore/QCoreApplication>
#include <QBuffer>
#include <QByteArray>
#include <QDataStream>
#include <QDebug>

void write_buffer(int type, QBuffer& buffer)

    if( buffer.open(QIODevice::WriteOnly) )
    
        QDataStream out(&buffer);

        out << type;

        if( type == 0 )
        
            out << QString("mylove");
            out << QString("3.1415");
        
        else if( type == 1 )
        
            out << 3;
            out << 1415;
        
        else if( type == 2 )
        
            out << 3.1415;
        

        buffer.close();
    


void read_buffer(QBuffer& buffer)

    if( buffer.open(QIODevice::ReadOnly) )
    
        int type = -1;
        QDataStream in(&buffer);

        in >> type;

        if( type == 0 )
        
            QString dt = "";
            QString pi = "";

            in >> dt;
            in >> pi;

            qDebug() << dt;
            qDebug() << pi;
        
        else if( type == 1 )
        
            int a = 0;
            int b = 0;

            in >> a;
            in >> b;

            qDebug() << a;
            qDebug() << b;
        
        else if( type == 2 )
        
            double pi = 0;

            in >> pi;

            qDebug() << pi;
        

        buffer.close();
    


int main(int argc, char *argv[])

    QCoreApplication a(argc, argv);
    QByteArray array;
    QBuffer buffer(&array);

    write_buffer(0, buffer);
    read_buffer(buffer);

    return a.exec();

运行结果
技术图片
B.QBuffer缓冲区的使用场合
1.在线程间进行不同类型的数据传递
2.缓存外部设备中的数据返回
3.数据读取速度小于数据写入速度
C.QDir是Qt中功能强大的目录操作类
1.Qt中的目录分隔符统一使用‘/‘
2.QDir能够对目录进行任意的操作--创建、删除、重命名
3.QDir能够获取指定目录中的所有条目--文件和文件夹
4.QDir能够使用过滤字符串获取指定条目
5.QDir能够获取系统中的所有根目录
目录操作基础示例
技术图片

C.QFileSystemWatcher用于监控文件和目录的状态变化
1.能够监控特定目录和文件的状态
2.能够同时对多个目录和文件进行监控
3.当目录或者文件发生改变时将触发信号
4.可以通过信号与槽的机制捕捉信号并作出响应技术图片

以上是关于Qt--文本流和数据流缓冲操作和数据操作的主要内容,如果未能解决你的问题,请参考以下文章

stdin流和缓冲区

Qt文本流和数据流

java.IO输入输出流:过滤流:buffer流和data流

SSIS 数据流优化

java 21-11 数据输入输出流和内存操作流

文本协议的设计与实现-1