data
события в потоках (которые не находятся в объектном режиме) содержат произвольный объем данных. Вы можете получить все свои данные из потока в одном data
событии или в целой куче data
событий. Это несколько аналогично чтению потока TCP (поскольку базовый протокол HTTP использует только поток TCP), где данные поступают в произвольных порциях.
Сколько кусков поступает в него, связано с целым рядом факторов, ни один из которых вы не контролируете, включая:
- Как отправитель отправляет данные
- Как быстро сетевое соединение отправителя
- Как быстро inte rnet связь между вами и отправителем
- Как быстро ваш компьютер может получать данные из сети
- Что может случиться с данными, когда они пересекают целое число rnet, чтобы добраться до вас
И так далее ...
Итак, если вы действительно просто хотите ВСЕ данные, тогда вам нужно собрать все данные в событиях data
, объединить их вместе, а затем в событии end
вы будете знать, что теперь у вас есть ВСЕ данные.
Если вы хотите, чтобы значимые фрагменты данных были вместе Кстати, тогда вам придется анализировать данные по мере их поступления, чтобы вы могли найти границы некоторого значимого объема данных (например, линий или какой-либо другой границы объекта). И вы должны быть готовы к тому, что вы можете получить частичную часть данных, должны буферизовать эти частичные данные до тех пор, пока остальная часть не поступит в следующее событие данных. Это то, как вы делаете инкрементальный анализ входящих потоков.
То, что data
событие приходит из входящего потока. В зависимости от того, как настроен поток, событие data
предложит либо объект Buffer (который выглядит как ваш), либо строку.