Я пытаюсь придумать алгоритм, чтобы определить, когда «конец» QIODevice
достигнуто (что означает, что больше данных никогда не будет доступно для чтения). В настоящее время мой алгоритм выглядит примерно так:
readChannelFinished()
сигналatEnd()
возвращается true
Тем не менее, документация для atEnd()
содержит следующее предупреждение:
Для некоторых устройств atEnd () может возвращать true, даже если есть еще данные для чтения. Этот особый случай применяется только к устройствам, которые генерируют данные в прямом ответе на ваш вызов read () (например, файлы / dev или / proc в Unix и OS X или консольный ввод / stdin на всех платформах).
Это где мой алгоритм ломается. Моей следующей идеей было постоянно проверять ценность bytesAvailable()
при чтении из обычного файла. Это дало очень странные результаты для /dev/zero
: bytesAvailable()
возвращенный 0
пока я не призвал read(amount)
, в этот момент он указал, что были 16384 - amount
осталось байтов.
Есть ли какой-нибудь «правильный» способ определить, есть ли еще данные, доступные для чтения с QIODevice
?
Задача ещё не решена.