Некоторые коммуникационные устройства имеют только очень маленькие встроенные буферы. В результате вы очень часто получаете данные только небольшими пакетами.
Многие GPS-приемопередатчики работают таким образом, и многие из них одновременно генерируют только около 5 тысяч байт (512 байт) данных.
Весьма вероятно, что последовательная микросхема в вашем устройстве жестко подключена, чтобы возвращать только столько байтов за раз, и в результате вам нужно будет продолжать читать порт до тех пор, пока байт Доступный вызов не вернет 0 байтов для чтения.
Я не могу вспомнить код / os-вызовы на моей голове, но вы могли бы взглянуть на SDK вашего устройства и посмотреть, упоминает ли он что-нибудь об увеличении / уменьшении размеров буфера на устройстве, если затем он увеличивается, что может увеличить объем данных, возвращаемых за одно попадание.
Впрочем, весьма необычно иметь большой буфер в вашем приложении и постепенно заполнять его повторяющимися вызовами на устройство для сбора данных.
Поскольку вы обнаружили, что команда "sleep" также заставляет вещи работать, то это может быть не проблемой размера буфера, а тем, что устройство заполняет свой буфер данных намного медленнее, чем ваше приложение / ПК читает его.