всегда будет возвращать токены из новой строки или может быть частичным результатом
Нет, не всегда будет возвращать полную строку. Вы должны быть готовы получить частичную линию. Если вам нужны построчные результаты, вы можете использовать интерфейс Readline , и он будет обрабатывать частичную буферизацию результатов и сообщать вам только о целой строке.
Что такое количество байтов, возвращаемых из потока по умолчанию или как это работает?
Поток использует внутренний буфер (который вы можете контролировать). Звонок на .read()
неблокируемый. Он вернет столько байтов, сколько имеет в своем буфере, вплоть до запрашиваемой вами суммы. Но, если в буфере слишком мало байтов, особенно когда вы читаете в конце буфера, вы можете получить частичные результаты до того, как поток получит следующий набор байтов из файла.
Таким образом, не существует автоматического c значения «по умолчанию», сколько байтов будет готово при первом чтении. Это зависит от целого ряда временных соображений, в том числе от того, сколько времени прошло с момента открытия потока и когда вы читаете, и насколько быстро работает ваш накопитель, и насколько велика конкуренция за использование процессора и ввода-вывода в вашей системе. Если вы не читаете некоторое время, поток должен заполнить свой внутренний буфер. Если вы читаете сразу, возможно, он еще не поместил ни много, ни много в буфер.
Означает ли это, что размер фрагмента будет не менее 64 * 1024 байта?
Нет, это означает, что размер чанка будет не больше этого. Для читаемого потока highWaterMark определяет максимальный объем данных, которые поток будет буферизовать перед вашими фактическими вызовами read()
. Как только поток заполняет этот буфер, он автоматически прекращает чтение, пока вы не прочитаете некоторые из этих данных из внутреннего буфера.