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 将创建该目录。