08_Qt的IO、内存映射

来源:互联网 发布:差额计算法公式 编辑:程序博客网 时间:2024/06/03 06:20

    • 一QByteArrayQString区别
    • 二QFile
    • 三QBuffer
    • 四QTextStream
    • 五QDataStream
    • 六内存映射文件

一、QByteArray、QString区别

/*字符数组与字符串是有区别的,在传输的时候还是转化为字符数组再进行传输,避免出错*/    QByteArray ba("刘备非"); //9:字节,说明这个字符数组是按字节来存放的    QString str("刘备非"); //3:字符,说明string是根据字符编码来存放的    qDebug() << ba.size() << str.size();

二、QFile

/*直接往文件中写入数据是不建议的,建议转换为字符数组后再存入文件*/    QFile file("chen.txt") ;    if( file.open( QIODevice::ReadWrite ) ) {        file.write( "good\r\t\n"  ) ;        file.write( QByteArray("nice\n") ) ;         file.write( QString("hello\n").toLatin1().data() ) ;    }    file.close( ) ;

三、QBuffer

/*在进行输入输出时候,有缓冲区这个概念,在缓冲区没满或是遇到换行、回车之前都在缓冲区中的    **所以利用缓冲区来进行操作能提高效率*/    QBuffer buffer ;    buffer.open( QIODevice::ReadWrite ) ;    buffer.write( "abc" ) ;    buffer.close() ;    qDebug()<<buffer.buffer() ;
/*可以通过缓冲区来进行读取然后显示,在重新打开或者调用setBuffer()之前缓存必须被关闭*/    /*send*/    QBuffer buffer ;    buffer.open( QIODevice::ReadWrite ) ;    QPixmap pixmap("./1.png") ;    pixmap.save( &buffer , "PNG") ;    buffer.close() ;    qDebug()<<buffer.buffer().size() ;//qbytearray的格式,符合传输要求    /*receive*/    QPixmap pixmap2 ;    pixmap2.loadFromData( buffer.buffer() ,"PNG") ;    QLabel *label = new QLabel ;    label->setPixmap( pixmap2 ) ;    QWidget *w = new QWidget ;    label->setParent( w ) ;    w->show() ;

四、QTextStream

/*qfile,qbuffer 都是内存文件(可以这么称呼吧),qtextstream,qdatastream都是操作io的方法*/    /*qtextstream实例:*/    QFile file("./chen.txt") ;    file.open( QIODevice::ReadWrite ) ;    QTextStream ts( &file ) ;    ts<<12<<"chen wei nan"<<1.3<<QString("abc") ;    file.close() ;

五、QDataStream

/*qdatastream和qtextstream的区别,qtextstream只能处理普通文本,提供更好的显示效果;    qdatastream能做的事比qtextstream更多,序列化数据,能提供更好的数据处理能力*/    QFile file("./chen.txt") ;    file.open( QIODevice::ReadWrite ) ;    QDataStream ds( &file ) ;    ds<<12<<"chen wei nan"<<1.3<<QString("abc") ;    file.close() ;
QFile file("./chen.txt") ;    file.open( QIODevice::ReadWrite ) ;    QDataStream ds( &file ) ;    int i ;    char *buf ;    double d ;    QString str ;    ds>>i>>buf>>d>>str ;    qDebug() << i << buf << d << str << "endl" ;    file.close() ;

六、内存映射文件

QFile file("./1.png") ;    file.open(QIODevice::ReadWrite ) ;    file.seek( 64*1024 ) ;//拓展文件    file.write( "1" ) ;    file.close(  ) ;    file.open( QIODevice::ReadWrite ) ;    uchar *ptr = file.map( 0 , 64*1024 ) ;//在内存中映射d空间大小    /*这样直接对内存操作就是对文件操作,对于大文件可以使用这种方式*/    //write file    *ptr = 'a' ;    ptr[1] = 'b' ;    //read file    uchar ch = *ptr ;    //解除映射    file.unmap( ptr ) ;    qDebug() << ch ;    file.close() ;