[英]Reading large file from QNetworkReply to QFile? Streaming from QNetworkReply
stream 以非阻塞方式从QNetworkReply
到QFile
的大文件的正确方法是什么?
我假设我需要连接到QNetworkReply::readyRead
信号并在插槽中调用QNetworkReply::read
,并使用QFile::write
数据,然后我猜在QNetworkReply::finished
调用QNetworkReply::readAll
以获得任何剩余字节。
我不清楚的是我应该在readyRead
中调用多少次,传递给它的缓冲区有多大,以及我是否应该read
一个readyRead
信号中多次调用read
- 如果不止一次,在什么条件下我应该停止调用read
:
connect(reply, &NetworkReply::readyRead, [file] {
while (???) {
file.write(reply->read(???));
}
});
是否保证read
不会阻塞(因此会阻塞 UI 事件循环)?
(也不清楚错误检查。如果该循环中出现文件 io 错误的网络错误怎么办?)
(另外,是否有更高级别的 class 可以为我解决这个问题?)
正确的方法是调用readAll
以响应readyRead
。 readAll
将返回 memory 中当前可用的所有字节(在文件完成之前它不会阻塞):
connect(reply, &NetworkReply::readyRead, [file] {
file.write(reply->readAll());
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.