08_Qt的IO、内存映射

一、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() ;
  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值