我正在尝试提出一种算法来检测何时QIODevice
达到 a 的“结束”(这意味着将不再有数据可供读取)。目前,我的算法看起来像这样:
- 对于顺序设备,等待
readChannelFinished()
信号 - 对于常规文件,连续读取数据直到
atEnd()
返回true
但是,文档atEnd()
包含以下警告:
对于某些设备,即使有更多数据要读取,atEnd() 也可以返回 true。这种特殊情况仅适用于生成数据以直接响应您调用 read() 的设备(例如,Unix 和 OS X 上的 /dev 或 /proc 文件,或所有平台上的控制台输入 /stdin)。
这就是我的算法崩溃的地方。我的下一个想法是不断检查bytesAvailable()
从常规文件读取时的值。这产生了一些非常奇怪的结果/dev/zero
:在我调用之前bytesAvailable()
返回,此时它表明还有字节剩余。0
read(amount)
16384 - amount
是否有任何“正确”的方法来确定是否仍有数据可从 a 中读取QIODevice
?