Qt网络编程:QAbstractNetworkCache和QNetworkDiskCache

QAbstractNetworkCache

一、描述

QAbstractNetworkCache 是 QNetworkAccessManager 使用的标准缓存的基类。 此类为抽象类,不能被实例化。

二、成员函数

1、void clear()

从缓存中删除所有项目。纯虚函数。

2、qint64 cacheSize()

返回缓存占用的当前大小。根据缓存实现,这可能是磁盘或内存大小。纯虚函数。

3、QIODevice * data(const QUrl &url) 

返回与 url 关联的缓存数据。如果 url 没有缓存,则 url 无效,或者如果存在内部缓存错误,则返回 nullptr。纯虚函数。

4、void insert(QIODevice *device) 

将设备中的数据插入缓存中。纯虚函数。

5、QNetworkCacheMetaData metaData(const QUrl &u)

返回 url 缓存项元数据。如果缓存包含 u 的数据,则返回有效的 QNetworkCacheMetaData。纯虚函数。

6、QIODevice * prepare(const QNetworkCacheMetaData &metaData)

返回应填充缓存项元数据的设备。纯虚函数。

7、bool remove(const QUrl &url)

删除 url 的缓存条目,成功返回 true否则返回 false。纯虚函数。

8、void updateMetaData(const QNetworkCacheMetaData & m)

更新缓存项元数据。纯虚函数。


QNetworkDiskCache

一、描述

QNetworkDiskCache 继承自QAbstractNetworkCache 。QNetworkDiskCache 使用 QDataStream 将每个 url 存储在缓存目录内相应的文件中。

默认情况下,QNetworkDiskCache 将缓存在系统上使用的空间量限制为 50MB。

必须先设置缓存目录才能工作。

可以通过以下方式启用网络磁盘缓存:

 QNetworkAccessManager *manager = new QNetworkAccessManager(this);
 QNetworkDiskCache *diskCache = new QNetworkDiskCache(this);
 diskCache->setCacheDirectory("cacheDir");
 manager->setCache(diskCache);

发送请求时,要控制何时使用缓存何时使用网络的代码:

 //普通的请求(首选来自网络,默认)
 QNetworkRequest request(QUrl(QString("http://qt-project.org")));
 manager->get(request);

 //从缓存中优先的请求
 QNetworkRequest request2(QUrl(QString("http://qt-project.org")));
 request2.setAttribute(QNetworkRequest::CacheLoadControlAttribute,QNetworkRequest::PreferCache);
 manager->get(request2);

要检查响应是来自缓存还是来自网络:

 void replyFinished(QNetworkReply *reply) 
 {
     QVariant fromCache = reply->attribute(QNetworkRequest::SourceIsFromCacheAttribute);
     qDebug() << "页面来自于缓存?" << fromCache.toBool();
 }

二、成员函数

1、qint64 expire()

清理缓存,使其大小低于最大缓存大小。返回缓存的当前大小。

当缓存的当前大小大于 maximumCacheSize() 时,将删除较旧的缓存文件,直到总大小小于 maximumCacheSize() 的 90%,从最旧的开始,首先使用文件创建日期来确定缓存文件的年龄 是。

子类可以重新实现这个函数来改变缓存文件被删除的顺序。

2、QNetworkCacheMetaData fileMetaData(const QString &fileName)

返回缓存文件 fileName 的 QNetworkCacheMetaData。如果 fileName 不是缓存文件 QNetworkCacheMetaData 将无效。

3、qint64 setMaximumCacheSize()

设置磁盘缓存的最大大小。如果新大小小于当前缓存大小,将调用 expire()。

4、void setCacheDirectory(const QString &cacheDir)

设置缓存文件的存储目录。如果该目录不存在,QNetworkDiskCache 将创建该目录。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值