QT中流Qbuffer的应用总结

3 篇文章 0 订阅

一:概述

1) QBuffer 继承类QIODevice,如下:

class Q_CORE_EXPORT QBuffer : public QIODevice


2) QIODevice中有本文应用的函数:

(1)qint64 write(const char *data, qint64 len);

(2) qint64 read(char *data, qint64 maxlen);

(3)virtual bool open(OpenMode mode);

(4) virtual void close();

(5)virtual bool seek(qint64 pos);


3) 本位用到的GMemoryStream是从Qbuffer继承而来,其实把GMemoryStream看成Qbuffer一点也没有问题。

class GMemoryStream : public QBuffer

{
#ifndef QT_NO_QOBJECT
    Q_OBJECT
#endif
public:
    GMemoryStream(OpenMode flags = GStream::ReadWrite);
    explicit GMemoryStream(GByteArray *buf, bool ownerBuf, OpenMode flags = GStream::ReadWrite);
    virtual ~GMemoryStream();

private:
    bool m_ownerBuf;
    GByteArray *m_buf;
};


 二:函数应用

(1)virtual bool seek(qint64 pos);

  看下面的三句代码:

   GMemoryStream* pStream = NULL;
    pStream = new GMemoryStream();
     pStream->seek(0);

 pStream->seek(0);的作用在于找到流的开始位置,以便于以后写入。


 (2)oStream.open(QIODevice::ReadWrite);

一个流只能打开一次,如果在一个流中被打开多次,则每一次都会回到流的开始位置。


(3)qint64 write(const char *data, qint64 len);

    oStream.write((char*)(&nSize), sizeof(int));

可以把这句话理解为把int nSize;变量的值,写入到流oStream中。

写入的大小是4个字节。

写入的位置是上一个写入位置紧跟着的4个字节或流的开始位置。


(4) qint64 read(char *data, qint64 maxlen);

    oStream.read((char*)(&nSize), sizeof(int));

可以把这句话理解为把流oStream的值读入到int nSize;中。

读入的大小是4个字节。

读入的位置是上一个读入位置紧跟着的4个字节或流的开始位置。


(5) virtual void close();用完了流就应该关闭


三:总结

(1)数据写入流

        pStream = new GMemoryStream();
        pStream->seek(0);
        oStream.write((char*)(&nSize), sizeof(int));
       

        .... 
        pStream->close();

(2)数据从流中加载

       GMemoryStream oStream;

      oStream.open(QIODevice::ReadWrite);

      oStream.read((char*)(&nCount), sizeof(int));

        .... 
       oStream.close();

(3)Qbuffer应用不出错的关键是按字节格式写入流后,各个数据一定要按写入格式大小和顺序读入。一定要注意格式,Qbuffer可不能按名称查找数据奥


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值