繁体   English   中英

从 QNetworkReply 读取大文件到 QFile? 从 QNetworkReply 流式传输

[英]Reading large file from QNetworkReply to QFile? Streaming from QNetworkReply

stream 以非阻塞方式从QNetworkReplyQFile的大文件的正确方法是什么?

我假设我需要连接到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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM