[英]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.